2016-11-08 8 views
-1

------編集---------------比較すると両方の配列に存在するオブジェクトのインデックスを返します。

私はオブジェクトA、 Aの両方であり、B

//after the operation 
a = [{id:1},{id:2},{id:3}]; 

で、私はそれを行うためには、私がAを使用するためにAでそれらのインデックスを取得する必要があると思った私は、オブジェクトを削除するB

var a = [{id:1},{id:2},{id:3},{id:4},{id:5}]; 
var b = [{id:1},{id:2},{id:3}]; 

スプライス()しかし、私は私がそれを行う方法について私の頭を包むことはできません。

これは私がフィルタ内のフィルターが進むべき道ではないでしょう Difference between two array of objects in JavaScript

var onlyInA = A.filter(function(current){ 
    return res.nodes.filter(function(current_b){ 
     return current_b._id == current._id 
    }).length == 0 
+1

いくつかのデータと希望の結果を追加してください。 –

+0

削除する場合は、フィルター行で削除するだけでなく、一度ループしないでもう一度削除してください.... – epascarello

+0

btw、両方の配列に存在するオブジェクトが必要です1つで –

答えて

2

からオブジェクト自体を取得するために使用するコードです。あなたはフィルターといくつかを使用したい。

var a = [{id:1},{id:2},{id:3},{id:4},{id:5}]; 
 
var b = [{id:1},{id:2},{id:5},{id:6},{id:7}]; 
 

 
var result = a.filter(function(oa) { 
 
    return b.some(function(ob){ 
 
    return oa.id===ob.id; 
 
    }); 
 
}); 
 

 
a.length = 0; 
 
a.push.apply(a, result); 
 

 
console.log(JSON.stringify(a));

あなたはスプライスを(使用する場合)、後方それをループより。

var a = [{id:1},{id:2},{id:3},{id:4},{id:5}]; 
var b = [{id:1},{id:2},{id:5},{id:6},{id:7}]; 

for (var i=a.length-1;i>=0;i--) { 
    var inB = b.some(function(ob){ 
     return a[i].id===ob.id; 
    }); 
    if(!inB) { 
     a.splice(i,1) 
    } 
} 
console.log(a); 
+0

申し訳ありませんが、スプライスと組み合わせてフィルタを使用して、Aにない要素を削除する方法について、まだ少し混乱しています –

+0

スプライスを使用する必要はありません.... – epascarello

+0

私のバージョンでは、配列を代入することはできませんが、要素をそれから削除する必要があります:( –

2

オブジェクトのIDにはハッシュテーブルを使用し、それにはaというフィルタを使用できます。

var a = [{ id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }, { id: 5 }], 
 
    b = [{ id: 1 }, { id: 2 }, { id: 3 }], 
 
    hash = Object.create(null); 
 

 
b.forEach(function (item) { 
 
    hash[item.id] = true; 
 
}); 
 

 
a = a.filter(function (item) { 
 
    return hash[item.id]; 
 
}); 
 

 
console.log(a);

関連する問題