如何实现两个数组的共同单词以逗号分隔输出?JS代码优化
问题分析
你的代码现在只是把匹配到的单词直接拼接成字符串,完全没加分隔符,所以才会输出hellohurrayfee这种连在一起的结果。另外,如果数组里有重复的共同单词,还会重复添加,这也不是我们想要的效果。
修复方案
我们换个思路:先把所有共同单词收集到数组里,最后用join(', ')方法把数组转换成「逗号加空格」分隔的字符串,就能轻松得到预期格式了。
基础修复版本(保留原循环逻辑)
let first = ["hello", "hurray", "world", "fee"]; let second = ["hello", "earth", "fee", "hurray"]; let res = []; // 改用数组存储结果,不用直接拼接字符串 for (let i=0; i<first.length; i++) { for (let j=0; j<second.length; j++) { if (first[i] === second[j]) { // 避免重复添加同一个单词 if (!res.includes(first[i])) { res.push(first[i]); } break; // 找到匹配后跳出内层循环,不用白跑剩下的元素 } } } console.log(res.join(', ')) // 输出: "hello, hurray, fee"
更简洁高效的优化版本
如果数组元素很多,双重循环的效率会很低,我们可以用Set来优化查找速度,同时自动处理重复问题:
let first = ["hello", "hurray", "world", "fee"]; let second = ["hello", "earth", "fee", "hurray"]; // 把第二个数组转成Set,查找时间复杂度直接降到O(1) const secondWordSet = new Set(second); // 过滤出first数组里存在于secondSet的单词,并用Set去重 const commonWords = [...new Set(first.filter(word => secondWordSet.has(word)))]; console.log(commonWords.join(', ')); // 输出: "hello, hurray, fee"
关键改进点
- 用数组存储结果而非直接拼接字符串,让分隔符处理变得异常简单;
- 添加去重逻辑,避免同一个单词多次出现在最终结果里;
- 优化版本利用
Set的高效查找特性,大幅提升处理大数据量时的性能,代码也更简洁。
内容的提问来源于stack exchange,提问作者eddie
相关产品推荐
相关产品推荐

