在下面的代码中,我能够比较2个数组并过滤掉第一个数组中不包含的元素。
const a = [1,2,3,4,5];
const b = [1,3]
const elements_in_a_not_in_b = a.filter((element) => !b.includes(element))
console.log(
elements_in_a_not_in_b
)
但是现在我想为只包含对象的数组解决这个问题。如何做到这一点?
const a = [Object,Object,Object,Object,Object];
const b = [Object,Object]
答案 0 :(得分:1)
你想遍历a中的每个元素并检查b上是否有任何匹配,如果没有,则将其添加到输出中。
function getElementsInANotInB(a,b){
var results = []
for(var i=0;i<a.length;i++){
var in_b = false
// check if any element in b matches a[i]
for(var u=0;u<b.length;u++){
if(compareObjects(a[i],b[u])){
in_b = true
break
}
}
if(!in_b) // no element in b matched a[i], add to results
results.push(a[i])
}
return results
}
function compareObjects(obj1,obj2,reversed){
// search for differences recursively
for(var key in obj1){
if(typeof obj2[key]=="undefined") return false
if(typeof obj1[key] == "object"){
if(!compareObjects(obj1[key],obj2[key])) return false
}
else if(obj1[key]!=obj2[key]) return false
}
return reversed ? true : compareObjects(obj2,obj1,true)
}
调用getElementsInANotInB(a,b)
应该会为您提供所需的数组,其中包含a中不包含b的所有元素。