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

JS如何向数组push元素且不删除已有元素?两数组交集存入问题

JavaScript数组交集合并问题解决方案

问题定位

  • 你的原有代码逻辑不会删除sameFriend中的已有元素,你感知到的「james被移除」是调试输出错误导致的误判:循环中你使用bFriend的遍历索引k去读取sameFriend的元素,而sameFriend初始已存在1个元素,后续新增元素的下标从1开始,和k的取值不匹配,才会出现打印结果不符合预期的情况。
  • 实际执行完你的原始代码后,sameFriend的最终值为['golf', 'dick', 'rex', 'james'],初始元素和三个交集元素全部完整保留,没有元素被删除。

实现方案

方案1:保留原有双重循环逻辑(修正调试输出)

let aFriend = ['dick', 'rex', 'james', 'tom', 'jack'];
let bFriend = ['dick', 'rex', 'james', 'jake'];
let sameFriend = ['golf'];

for (let i = 0; i < aFriend.length; i++){
  for (let k = 0; k < bFriend.length; k++){
    if (aFriend[i] === bFriend[k]){
      sameFriend.push(bFriend[k]);
      // 修正:打印最新插入的元素,不要使用k作为索引取值
      console.log(sameFriend[sameFriend.length - 1]);
    }
  }
}

// 打印完整数组验证结果
console.log(sameFriend)

方案2:高性能交集计算实现(避免双层循环)

通过Set数据结构将查询复杂度从O(n)降到O(1),整体时间复杂度从O(n*m)优化为O(n+m),数组长度越大性能优势越明显:

let aFriend = ['dick', 'rex', 'james', 'tom', 'jack'];
let bFriend = ['dick', 'rex', 'james', 'jake'];
let sameFriend = ['golf'];

const bFriendSet = new Set(bFriend);
aFriend.forEach(item => {
  if (bFriendSet.has(item)) {
    sameFriend.push(item);
  }
})

console.log(sameFriend)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 04:54:04