通过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, 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: 30, Name: "Test3"}]; var arr3 = [{Id: 1, Name: "Test1"}, {Id: 6, Name: "Test3"}, {Id: 30, Name: "Test3"}]; var new_arr = compare(arr1, arr2, arr3); console.log(new_arr); function compare() { let arr = [...arguments] return arr.shift().filter( y => arr.every( x => x.some( j => j.Id === y.Id) ) ) } 
 var res = arr1.filter(function(o) { return arr2.some(function(o2) { return o.Id === o2.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"}]; arr1 = arr1.filter(function (el) { return this[el.Id]; }, arr2.reduce(function (obj, el) { return obj[el.Id] = 1, obj; }, {})); console.log(arr1);