Javascript 按Id比较两个数组的元素,并从一个数组中删除另一个数组中未显示的元素
我有两个这样的对象数组:Javascript 按Id比较两个数组的元素,并从一个数组中删除另一个数组中未显示的元素,javascript,jquery,Javascript,Jquery,我有两个这样的对象数组: var arr1 = [{Id: 1, Name: "Test1"}, {Id: 2, Name: "Test2"}, {Id: 3, Name: "Test3"}, {Id: 4, Name: "Test4"}] var arr2 = [{Id: 1, Name: "Test1"}, {Id: 3, Name: "Test3"}] 我需要按Id比较两个数组的元素,并从arr1中删除arr2中未显示的元素(没有具有该Id的元素)。我该怎么做 您可以使用一个函数,该函
var arr1 = [{Id: 1, Name: "Test1"}, {Id: 2, Name: "Test2"}, {Id: 3, Name: "Test3"}, {Id: 4, Name: "Test4"}]
var arr2 = [{Id: 1, Name: "Test1"}, {Id: 3, Name: "Test3"}]
我需要按
Id
比较两个数组的元素,并从arr1
中删除arr2
中未显示的元素(没有具有该Id
的元素)。我该怎么做 您可以使用一个函数,该函数接受任意数量的数组,并且只返回所有数组中存在的项
function compare() {
let arr = [...arguments];
return arr.shift().filter( y =>
arr.every( x => x.some( j => j.Id === y.Id) )
)
}
var arr1=[{Id:1,名称:“Test1”},{Id:2,名称:“Test2”},{Id:3,名称:“Test3”},{Id:4,名称:“Test4”}];
var arr2=[{Id:1,名称:“Test1”},{Id:3,名称:“Test3”},{Id:30,名称:“Test3”}];
var arr3=[{Id:1,名称:“Test1”},{Id:6,名称:“Test3”},{Id:30,名称:“Test3”}];
var new_arr=比较(arr1、arr2、arr3);
控制台日志(新建);
函数比较(){
设arr=[…参数]
返回arr.shift().filter(y=>
arr.every(x=>x.some(j=>j.Id==y.Id))
)
}
垫片,垫片,垫片。使用散列(一组)将获得性能增益:
var arr1=[{Id:1,名称:“Test1”},{Id:2,名称:“Test2”},
{Id:3,名称:“Test3”},{Id:4,名称:“Test4”}];
var arr2=[{Id:1,名称:“Test1”},{Id:3,名称:“Test3”}];
arr1=arr1.滤波器(功能(el){
返回此.has(el.Id);
},新集合(arr2.map(el=>el.Id));
控制台日志(arr1)代码>您正在寻找两个javascript对象数组的交集。请参见此处:感谢您的回答,但我想知道是否有一种方法可以对多个数组(而不仅仅是2个数组)执行此操作?@Seano-编辑了答案以处理任意数量的数组
var res = arr1.filter(function(o) {
return arr2.some(function(o2) {
return o.Id === o2.Id;
})
});