如何在JavaScript中检查对象数组的code值是否存在于另一对象数组
检查数组对象的code是否存在于另一数组中
你的代码返回false是因为JavaScript中对象是引用类型,arr2.includes(item)判断的是两个对象是否是同一个内存引用,而不是它们的内容是否相等。哪怕两个对象的code和name完全一致,只要不是同一个对象实例,includes就会返回false。
下面是两种可行的实现方式:
方法一:利用Set优化查找效率
先把第二个数组的所有code提取到一个Set中,再遍历第一个数组检查每个对象的code是否存在于这个Set里。这种方式的时间复杂度是O(n+m),适合处理大数据量的数组。
const arr1 = [{code: 'a', name: 'x'}]; const arr2 = [{code: 'a', name: 'x'}, {code: 'b', name: 'y'}]; // 提取arr2中所有对象的code,存入Set const arr2CodeSet = new Set(arr2.map(item => item.code)); // 检查arr1的每个对象的code是否都在Set中 const isAllExist = arr1.every(item => arr2CodeSet.has(item.code)); console.log(isAllExist); // 输出: true
方法二:使用every + some直接匹配
如果数组规模不大,也可以直接用every结合some,逐个检查第一个数组的对象是否能在第二个数组中找到code匹配的项。时间复杂度是O(n*m),小数据量下足够用。
const arr1 = [{code: 'a', name: 'x'}]; const arr2 = [{code: 'a', name: 'x'}, {code: 'b', name: 'y'}]; const isAllExist = arr1.every(item1 => arr2.some(item2 => item2.code === item1.code)); console.log(isAllExist); // 输出: true
内容的提问来源于stack exchange,提问作者Oops
相关产品推荐
相关产品推荐

