2017-10-13 12 views
0

Ich habe zwei Arrays von Objekten:Suche Array von Objekten aus Array von Objekten - Javascript

var objArray1 = [{'name':'abc', 'phone':'0333'}, 
       {'name':'xyz', 'phone':'0334'}, 
       {'name':'fgfh', 'phone':'0999'}, 
       {'name':'abc', 'phone':'0666'}, 
       {'name':'abc', 'phone':'0444'} 
       ] 

var objArray2 = [{'name':'abc', 'mobile':'0333'}, 
       {'name':'xyz', 'mobile':'0334'}, 
       {'name':'fgfh', 'mobile':'0999'} 
       ] 

Ich mag Index von objArray2Telefon von objArray1 suchen.

Wenn Streichhölzer ich will, dass Objekt von objArray1 in existing Array geschoben werden, wenn keine Spiele dieses Objekt dann schieben in joiners Array.

Hier ist, was ich versuche zu tun.

objArray1.forEach(function(item){ 
    if (objArray2.indexOf(item.phone) < 0) { 
     joiners.push(item) 
    }else{ 
     existing.push(item) 
    } 
}) 

Above Code nicht funktioniert und alle Objekte objArray1 in Tischler setzen.

Aktuelle Ergebnis:

joiners = [{'name':'abc', 'phone':'0333'}, 
       {'name':'xyz', 'phone':'0334'}, 
       {'name':'fgfh', 'phone':'0999'}, 
       {'name':'abc', 'phone':'0666'}, 
       {'name':'abc', 'phone':'0444'} 
       ] 

Gewünschtes Ergebnis:

joiners = [{'name':'abc', 'phone':'0666'}, 
      {'name':'abc', 'phone':'0444'} 
      ] 

und danach habe ich umgekehrt und machen eine Reihe von Abgänger überprüfen möchten, ob any object of objArray2 in objArray1 nicht existieren.

+0

bitte auch das gewünschte Ergebnis hinzufügen. –

Antwort

1

Sie können das Vorhandensein mit der Funktion Array#some überprüfen. Er gibt true zurück, wenn die Bedingung erfüllt ist, andernfalls false. indexOf überprüft durch den Vergleich der Referenzen, weil Sie verschiedene Objekte haben, erhalten Sie immer false in der if Anweisung.

Ich habe ein bisschen den Code in der Funktion forEach geändert

const objArray1 = [ 
 
    {'name':'abc', 'phone':'0333'}, 
 
    {'name':'xyz', 'phone':'0334'}, 
 
    {'name':'fgfh', 'phone':'0999'}, 
 
    {'name':'abc', 'phone':'0666'}, 
 
    {'name':'abc', 'phone':'0444'}]; 
 

 
const objArray2 = [ 
 
    {'name':'abc', 'mobile':'0333'}, 
 
    {'name':'xyz', 'mobile':'0334'}, 
 
    {'name':'fgfh', 'mobile':'0999'}]; 
 
       
 
const joiners = []; 
 
const existing = []; 
 

 
objArray1.forEach(item => 
 
    objArray2.some(i => i.mobile === item.phone) ? 
 
    joiners.push(item) : existing.push(item)); 
 

 
console.log(joiners); 
 
console.log(existing);

+0

Sie wissen, was ich sagen werde. – Cerbrus

+0

Arbeitete mit einer kleinen Verbesserung in der Bedingung. Nach meinem Bedürfnis. –

0

Sie könnten eine Hash-Tabelle übernehmen und sie als Bedingung verwenden zu schieben.

var objArray1 = [{ name: 'abc', phone: '0333' }, { name: 'xyz', phone: '0334' }, { name: 'fgfh', phone: '0999' }, { name: 'abc', phone: '0666' }, { name: 'abc', phone: '0444' }], 
 
    objArray2 = [{ name: 'abc', mobile: '0333' }, { name: 'xyz', mobile: '0334' }, { name: 'fgfh', mobile: '0999' }], 
 
    joiners = [], 
 
    existing = [], 
 
    hash = Object.create(null); 
 

 
objArray2.forEach(function (item) { hash[item.mobile] = true; }); 
 

 
objArray1.forEach(function(item) { 
 
    (hash[item.phone] ? existing : joiners).push(item); 
 
}); 
 

 
console.log(joiners); 
 
console.log(existing);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

Sie wissen, was ich sagen werde. – Cerbrus