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

如何检查数组arr1的VI_ID是否存在于数组arr2的VILLAGE_ID中

问题:匹配两个对象数组的关联ID并输出对应名称

给定两个对象数组:

var arr1 = [
  {
    VILLAGES_NAME: 'Chozuba Vill.',
    VI_ID: 269292,
    VI_SUBDIST_ID: 1806
  },
  {
    VILLAGES_NAME: 'Thevopisu',
    VI_ID: 269381,
    VI_SUBDIST_ID: 1806
  },
  {
    VILLAGES_NAME: 'Chozubasa (UR)',
    VI_ID: 269293,
    VI_SUBDIST_ID: 1806
  }
];

let arr2 = [
  {
    LOCALITIES_NAME: 'CHOZUBA PART TWO',
    LOCALITY_ID: 301,
    VILLAGE_ID: 269292
  },
  {
    LOCALITIES_NAME: 'CHOZUBA PART ONE',
    LOCALITY_ID: 300,
    VILLAGE_ID: 269292
  }
];

需求:遍历arr1,检查每个元素的VI_ID是否与arr2中任意元素的VILLAGE_ID匹配,匹配则输出该元素的VILLAGES_NAME。

现有代码的问题

你尝试的代码无法得到预期结果,原因是:

if(arr2.includes(arr1[i].VI_ID))

arr2是对象数组,includes方法会严格匹配数组中的整个元素(即判断是否有元素完全等于传入的数字),但arr2里的元素都是包含多个属性的对象,所以这个判断永远返回false,自然不会输出任何内容。

两种正确实现方式

方式一:用Set优化查询效率(适合大数据量)

先把arr2中的所有VILLAGE_ID提取到Set集合中,再遍历arr1做匹配:

// 提取arr2中所有VILLAGE_ID到Set
const villageIdSet = new Set(arr2.map(item => item.VILLAGE_ID));

// 遍历arr1检查匹配
for (let i = 0; i < arr1.length; i++) {
  if (villageIdSet.has(arr1[i].VI_ID)) {
    console.log(arr1[i].VILLAGES_NAME);
  }
}

Set的has方法查询时间复杂度为O(1),比每次遍历arr2效率更高,数据量大时优势明显。

方式二:直接用Array.some方法(适合小数据量)

遍历arr1时,用some方法检查arr2中是否存在匹配的元素:

for (let i = 0; i < arr1.length; i++) {
  const isMatched = arr2.some(item => item.VILLAGE_ID === arr1[i].VI_ID);
  if (isMatched) {
    console.log(arr1[i].VILLAGES_NAME);
  }
}

some方法会在找到第一个匹配元素后立即停止遍历,无需遍历整个arr2。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:12:52