3

私はこのようなオブジェクトの2つの配列を持っています:

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"}]

2つの配列の要素を比較し、に表示されていないId要素を削除する必要があります(その要素はありません)。これどうやってするの ? arr1arr2Id

4

3 に答える 3

11
var res = arr1.filter(function(o) {
    return arr2.some(function(o2) {
        return o.Id === o2.Id;
    })
});

シム、シム、シム。

于 2013-02-20T15:34:46.100 に答える
8

任意の数の配列を受け入れ、それらすべてに存在するアイテムのみを返す関数を使用できます。

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

于 2013-02-20T15:32:52.257 に答える
3

ハッシュ(セット)を使用すると、パフォーマンスが向上します。

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.has(el.Id);
}, new Set(arr2.map(el => el.Id)));

console.log(arr1);

以下から値を取得する新しいセットが作成されます。Idarr2

"1","3"

そのセットはtoとして渡されるためthisArgfilterコールバック内filterでは。として使用できますthis

于 2016-06-19T18:14:57.143 に答える