JavaScript:如何从数组的连续字符串中匹配指定单词
如何检测数组中是否存在连续字符组成指定单词?
当然可以帮你搞定这个问题!我来给你一步步拆解思路,再附上实用的代码实现~
核心思路
要解决这个问题,我们的核心目标是检查数组中是否存在一段连续的元素,恰好按顺序匹配目标单词的每一个字符。具体可以分成这几步:
- 先做快速判断:如果目标单词的长度比数组还长,直接返回
false——毕竟数组里连足够的元素都没有,不可能匹配成功。 - 遍历数组的每个可能起始位置:从第0个元素开始,到
数组长度 - 单词长度的位置结束(这样才能保证从该位置往后有足够的元素来匹配单词)。 - 逐个对比字符:从当前起始位置开始,依次对比后续元素和目标单词的对应字符,只要有一个不匹配就跳过这个起始位置;如果全部匹配,就立即返回
true。 - 遍历完所有可能都没匹配到的话,返回
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
相关产品推荐
相关产品推荐

