如何根据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 haveO(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");
}