You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript:如何从数组的连续字符串中匹配指定单词

如何检测数组中是否存在连续字符组成指定单词?

当然可以帮你搞定这个问题!我来给你一步步拆解思路,再附上实用的代码实现~

核心思路

要解决这个问题,我们的核心目标是检查数组中是否存在一段连续的元素,恰好按顺序匹配目标单词的每一个字符。具体可以分成这几步:

  1. 先做快速判断:如果目标单词的长度比数组还长,直接返回false——毕竟数组里连足够的元素都没有,不可能匹配成功。
  2. 遍历数组的每个可能起始位置:从第0个元素开始,到数组长度 - 单词长度的位置结束(这样才能保证从该位置往后有足够的元素来匹配单词)。
  3. 逐个对比字符:从当前起始位置开始,依次对比后续元素和目标单词的对应字符,只要有一个不匹配就跳过这个起始位置;如果全部匹配,就立即返回true。
  4. 遍历完所有可能都没匹配到的话,返回false。

JavaScript 代码实现(基础版)

function hasConsecutiveWord(arr, targetWord) {
  const wordLength = targetWord.length;
  const arrLength = arr.length;

  // 快速排除不可能的情况
  if (wordLength > arrLength) return false;

  // 遍历所有可能的起始索引
  for (let i = 0; i <= arrLength - wordLength; i++) {
    let isMatch = true;
    // 逐个对比当前起始位置后的字符和目标单词
    for (let j = 0; j < wordLength; j++) {
      if (arr[i + j] !== targetWord[j]) {
        isMatch = false;
        break; // 不匹配就跳出内层循环,试下一个起始位置
      }
    }
    if (isMatch) return true; // 找到匹配就立刻返回
  }

  return false; // 所有位置都试过了,没找到匹配
}

// 测试你的例子
const array = ['w', 'r', 'a', 'p', 'p', 'l', 'e', 'f', 'k', 'l'];
console.log(hasConsecutiveWord(array, 'apple')); // 输出: true

const array1 = ['w', 'r', 'a', 'p', 'l', 'p', 'e', 'f', 'k', 'l'];
console.log(hasConsecutiveWord(array1, 'apple')); // 输出: false

更简洁的实现(用数组高阶方法)

如果你喜欢更简洁的代码,可以用some和every这两个数组高阶方法,逻辑和上面一致,但代码更优雅:

function hasConsecutiveWord(arr, targetWord) {
  const wordLength = targetWord.length;
  const arrLength = arr.length;

  if (wordLength > arrLength) return false;

  // some:只要有一个满足条件就返回true
  return arr.some((_, startIndex) => {
    // 确保起始位置后面有足够的元素
    if (startIndex + wordLength > arrLength) return false;
    // every:检查从startIndex开始的所有字符是否都匹配目标单词
    return targetWord.split('').every((char, index) => arr[startIndex + index] === char);
  });
}

其他思路:数组切片对比

你也可以把目标单词拆成字符数组,然后每次截取数组的一段和它对比,这种方式可读性也不错:

function hasConsecutiveWord(arr, targetWord) {
  const targetChars = targetWord.split('');
  const wordLength = targetChars.length;
  const arrLength = arr.length;

  if (wordLength > arrLength) return false;

  for (let i = 0; i <= arrLength - wordLength; i++) {
    // 截取数组中从i开始的wordLength个元素
    const currentSlice = arr.slice(i, i + wordLength);
    // 对比两个数组是否完全一致(这里用JSON.stringify是简单方式,也可以用every手动对比)
    if (JSON.stringify(currentSlice) === JSON.stringify(targetChars)) {
      return true;
    }
  }

  return false;
}

这些方法都能完美解决你的问题,你可以根据自己的编码习惯选择合适的实现方式~

内容的提问来源于stack exchange,提问作者lupu51nfactum N778

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:01:34