如何根据JavaScript中的值检查对象是否在数组中?

如何根据JavaScript中的值检查对象是否在数组中?,javascript,Javascript,例如,如何根据id检查阵列2中的所有对象是否存在于阵列1中 const array1 = [{ id: 1 }, { id: 2 }, { id: 3 }] const array2 = [{ id: 1 }, { id: 2 }] 由于某种原因,我无法在谷歌上找到解决方案 我想了想: const result = array1.every(obj1 => { // what do use here? includes? contains? }) console.log(resul

例如,如何根据
id
检查
阵列2
中的所有对象是否存在于
阵列1

const array1 = [{ id: 1 }, { id: 2 }, { id: 3 }]
const array2 = [{ id: 1 }, { id: 2 }]
由于某种原因,我无法在谷歌上找到解决方案

我想了想:

const result = array1.every(obj1 => {
  // what do use here? includes? contains?
})

console.log(result)
但是我有点困在代码的中间。对我来说,最合理的解决方案是使用
includes
。但是,
includes
似乎没有使用函数:。因此,我不确定是否可以通过id检查对象。

像这样,结合使用:

这将检查
array2
中的每个元素是否在
array1
中都有匹配的元素


以下是完整的片段:

constarray1=[{id:1},{id:2},{id:3}];
常量数组2=[{id:1},{id:2}];
const result=array2.every(o2=>array1.some(o1=>o1.id==o2.id));

控制台日志(结果)
包含
仅当两个对象在内存中都是相同的引用时才为真,但(可能)并非如此。相反,我会先创建一个
数组1
id
集合,然后检查是否每个
数组2
id
都在集合中。这样,您只需在一开始就迭代
array1
一次(
Set
s have
O(1)
lookup time):

constarray1=[{id:1},{id:2},{id:3}];
常量数组2=[{id:1},{id:2}];
const idSet=new Set(array1.map(({id})=>id));
console.log(
array2.every({id})=>idSet.has(id))

);
对于大型数组,我建议对用作创建
集的标准的数组进行预处理,以便每个检查都是O(1)查找,并且总体是O(n),而不是O(n^2)。但是,该代码做出了两个假设,即:

  • 标准基于
    对象的
    select()
    函数、数组中的
    索引以及对
    数组的引用
  • 用作条件的选择返回一个原语,并可以使用
    a===b | | |(a!==a&b!==b)
    (处理
    a
    b
    NaN
    )执行与
    集相同的相等性检查
const has=select=>array=>{
常量集=新集(array.map(select))
return(对象、索引、数组)=>set.has(选择(对象、索引、数组))
}
const hasId=has({id})=>id)
常量数组1=[{id:1},{id:2},{id:3}]
常量数组2=[{id:1},{id:2}]
const result1=array1.every(hasId(array2))
const result2=array2.every(hasId(array1))
console.log(result1)
console.log(result2)
var matching=[];
对于(var j=0;j
已经提出了类似类型的问题。你也可以在这个链接上参考

constarray1=[{id:1},{id:2},{id:3}];
常量数组2=[{id:1},{id:2}];
设array1ids=array1.map(a=>a.id);
const result=array2.every(a=>array1ids.includes(a.id));
控制台日志(结果);
常量数组3=[{id:1},{id:2},{id:3}];
常量数组4=[{id:1},{id:6}];
让array3ids=array3.map(a=>a.id);
const result2=array4.every(a=>array3id.includes(a.id));
console.log(result2)
const result = array2.every(o2 => array1.some(o1 => o1.id === o2.id));
var matching = [];

for (var j = 0; j < array1.length; j++) {
    for (var i = 0; i < array2.length; i++) {
        if (array2[i].id === array1[j].id) {
            matching.push(array2[i].id);       
        }
    }
}

if (array2.length === matching.length) {
    console.log("All elements exist");
} else {
    console.log("One or more of the elements does not exist");
}