2017-01-06 6 views
2

IDが他の配列のオブジェクトと同じ場合、配列のオブジェクトを削除しようとしています。しかし、私はそれを行う方法を知らない。IDが他の配列オブジェクトと同じである場合、配列のオブジェクトを削除する方法

例:

parentArray1 = [ 
    { 
    id: 101 
    ... 
    }, { 
    REMOVE THIS OBJECT BECAUSE ITS ID IS THE SAME AS parentArray2[0].id 
    id: 102 
    ... 
    }, { 
    id: 103 
    ... 
    } 
]; 

parentArray2 = [ 
    { 
    id: 102 // SAME ID AS parentArray1[1].id 
    ... 
    } 
]; 

誰もがアイデアや解決策を持っていますか?

+0

あなたはあなたの例の配列をフォーマットすることはできますか?今は配列がありませんし、これを正しくコード化するのは難しいです。 –

+0

parentArray1とparentArray2のタイプは何ですか?オブジェクトまたは配列 – Kenny

答えて

4

フィルター、要素、それは第二で一部要素と一致しない場合:

parentArray1.filter(elt1 => !parentArray2.some(elt2 => elt2.id === elt1.id)) 

をここでは、ライン・バイ・ラインであるが形式コメント:

parentArray1      // From parentArray1 
    .filter(      // keep all the 
    elt1 =>      // elements for which 
     !       // it is not the case that 
     parentArray2     // parentArray2 
     .some(     // has some 
      elt2 =>     // elements for which 
      elt2.id    // the id 
      ===     // is equal to 
      elt1.id))    // the id of the first element. 

あなたのための構造化代入ES6のビット:

矢印機能なしES5で
parentArray1.filter(({id1}) => !parentArray2.some(({id2}) => id1 === id2)) 

、:

parentArray.filter(function(elt1) { 
    return !parentArray2.some(function(elt2) { 
    return elt2.id === elt1.id; 
    }); 
}) 

あなたはforループでこれを行うにしたい場合:

result = []; 

for (var i = 0; i < parentArray1.length; i++) { 
    var include = true; 
    for (var j = 0; j < parentArray2.length; j++) { 
    if (parentArray1[i].id === parentArray2[j].id) include = false; 
    } 
    if (include) result.push(parentArray1[i]); 
} 

あなたはまた、削除するIDのリストを事前に計算を検討する必要があります:

var removeIds = parentArray2.map(elt => elt.id); 

今、あなたはフィルタリングすることができparentArray1より簡単に:

parentArray1.filter(elt => !removeIds.contains(elt.id)) 
+0

ありがとう:)私はあなたのfor-loopsソリューションを使用しています:) –

1

あなたは望ましい結果を得るためにfilter()find()を使用することができます。さて

var parentArray1 = [{ 
 
    id: 101 
 
}, { 
 
    id: 102 
 
}, { 
 
    id: 103 
 
}]; 
 

 
var parentArray2 = [{ 
 
    id: 102 
 
}, { 
 
    id: 199 
 
}]; 
 

 
var result = parentArray1.filter(function(o) { 
 
    return !parentArray2.find(function(e) { 
 
    return o.id == e.id 
 
    }) 
 
}) 
 

 
console.log(result)

1

、私はいくつかの例のコードを(アレイ、functionprototypeから取り外し、3番目のアレイにコピー)を調製。新しい配列へ

コピー:

var a = [ 
 
    {id:1,name:"Paul"}, 
 
    {id:2,name:"Andre"}, 
 
    {id:3,name:"Sophie"}, 
 
    {id:4,name:"Anton"}, 
 
    {id:5,name:"John"}, 
 
    {id:6,name:"Einar"} 
 
]; 
 
var b = [ 
 
    {id:2,name:"Andre"}, 
 
    {id:5,name:"John"} 
 
]; 
 

 
var c = []; 
 

 
a.forEach(function(aItem, aIndex) { 
 
    var copy = true;  
 
    b.forEach(function(bItem, bIndex) { 
 
     if (aItem.id === bItem.id) { 
 
      copy = false; 
 
     } 
 
    }); 
 
    
 
    if(copy === true) { 
 
     c.push(aItem); 
 
    } 
 
    
 
}); 
 

 

 
console.log(c);

は、最初の配列から削除:

var a = [ 
 
    {id:1,name:"Paul"}, 
 
    {id:2,name:"Andre"}, 
 
    {id:3,name:"Sophie"}, 
 
    {id:4,name:"Anton"}, 
 
    {id:5,name:"John"}, 
 
    {id:6,name:"Einar"} 
 
]; 
 
var b = [ 
 
    {id:2,name:"Andre"}, 
 
    {id:5,name:"John"} 
 
]; 
 

 
a.forEach(function(aItem, aIndex) { 
 
    b.forEach(function(bItem, bIndex) { 
 
     if (aItem.id === bItem.id) { 
 
      a.splice(aIndex, 1); 
 
     } 
 
    }); 
 
}); 
 

 

 
console.log(a);

で試してみてください

機能として:プロトタイプとして

var a = [ 
 
    {id:1,name:"Paul"}, 
 
    {id:2,name:"Andre"}, 
 
    {id:3,name:"Sophie"}, 
 
    {id:4,name:"Anton"}, 
 
    {id:5,name:"John"}, 
 
    {id:6,name:"Einar"} 
 
]; 
 
var b = [ 
 
    {id:2,name:"Andre"}, 
 
    {id:5,name:"John"} 
 
]; 
 

 
function removeItemFromArrayByIndexObject(from, to, index) { 
 
    var result = []; 
 
    for (var i = 0; i < from.length; i++) { 
 
     var append = true; 
 
     for (var j = 0; j < to.length; j++) if (from[i][index] === to[j][index]) append = false; 
 
     if (append === true) result.push(from[i]); 
 
    } 
 
    return result; 
 
} 
 

 

 
console.log(removeItemFromArrayByIndexObject(a, b, 'id'))

:保つために

// first array 
 
var a = [ 
 
    {id:1,name:"Paul"}, 
 
    {id:2,name:"Andre"}, 
 
    {id:3,name:"Sophie"}, 
 
    {id:4,name:"Anton"}, 
 
    {id:5,name:"John"}, 
 
    {id:6,name:"Einar"} 
 
]; 
 
// second array 
 
var b = [ 
 
    {id:2,name:"Andre"}, 
 
    {id:5,name:"John"} 
 
]; 
 
// create prototype 
 
Array.prototype.removeItemFromArrayByIndexObject = function (to, index) { 
 
    var result = []; 
 
    for (var i = 0; i < this.length; i++) { 
 
     var remove = false; 
 
     for (var j = 0; j < to.length; j++) if (this[i][index] === to[j][index]) remove = true; 
 
     if (remove === true) this.splice(i, 1); 
 
    } 
 
    return this; 
 
} 
 
// apply 
 
a.removeItemFromArrayByIndexObject(b, 'id') 
 
// log 
 
console.log(a);

1

あなたはfindIndexを使用して、有効なインデックスを取得する場合、それをスプライスすることができます。

parentArray1 = [{ 
 
    id: 101 
 
}, { 
 
    //REMOVE THIS OBJECT BECAUSE ITS ID IS THE SAME AS parentArray2[0].id 
 
    id: 102 
 
}, { 
 
    id: 103 
 
}, { 
 
    //REMOVE THIS OBJECT BECAUSE ITS ID IS THE SAME AS parentArray2[0].id 
 
    id: 102 
 
}]; 
 

 
parentArray2 = [{ 
 
    id: 102 // SAME ID AS parentArray1[1].id 
 
}]; 
 

 
for(var i = 0; i< parentArray2.length; i++){ 
 
    var index = parentArray1.findIndex(x=>x.id === parentArray2[i].id); 
 
    if(index !== -1){ 
 
    parentArray1.splice(index,1); 
 
    i--; 
 
    } 
 
} 
 

 
console.log(parentArray1)

関連する問題