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

JavaScript比较两个数组生成新数组:匹配项留值不匹配补0实现问题

问题原因
  • 你混淆了数组索引和数组元素两个概念:
    • 循环变量i是arrayOne的索引,并非arrayOne里存储的元素值
    • 原有代码判断的是「索引i是否在arrayTwo中存在」,而非「arrayOne对应位置的元素值是否在arrayTwo中存在」
    • 取值时用索引i去取arrayTwo的元素,arrayTwo长度远小于arrayOne,自然会出现undefined
修复方案

方案1:直接修改原有for循环

把判断和取值的对象替换为arrayOne[i]即可:

let newArray = [];
for (let i=0; i < arrayOne.length; i++){
  if(arrayTwo.includes(arrayOne[i])) {
    newArray.push(arrayOne[i]);
  } else {
    newArray.push(0);
  }
}

方案2:更简洁的map写法(性能优化版)

如果数组长度较大,建议先把arrayTwo转成Set,Set.prototype.has的时间复杂度是O(1),比Array.prototype.includes的O(n)效率更高:

const twoSet = new Set(arrayTwo);
const newArray = arrayOne.map(item => twoSet.has(item) ? item : 0);

两种写法都可以得到你期望的[0,0,3,4,5,0,0,8,9,10,11,12,13,14,15,16,0,0]结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:57:00