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;
    })
});