2017-06-27 3 views
0

Gibt es bessere und einfachere Art und Weise Objekt und Array zu vergleichen basierend auf einigen Schlüsseln als die Verwendung von for loopVergleich Objekt und Array in Javascript

Beispiel:

var Obj = { 
 
    ID: "27374b25-a97b-4676-889b-32d87087c72d", 
 
    Name: "Kenny J. Jones", 
 
    City: "Dallas, TX" 
 
}; 
 
var Array = [{ 
 
    ID: "27374b25-a97b-4676-889b-32d87087c72d", 
 
    Name: "Kenny J. Jones", 
 
    City: "Dallas, TX" 
 
    }, 
 
    { 
 
    ID: "50d861e8-793f-4d6c-87f4-09cf7312310f", 
 
    Name: "Denise L. Demeo", 
 
    City: "Pine, LA 70438" 
 
    }, 
 
    { 
 
    ID: "95a03cda-5f26-4b60-b070-e92885f1a9b7", 
 
    Name: "Jose A. Steed", 
 
    City: "Florence, SC 29501" 
 
    } 
 
]; 
 

 
for (var i = 0; i < Array.length; i++) { 
 
    if (Obj.ID === Array[i].ID) { 
 
    Array[i].Person = true; 
 
    } 
 
} 
 
console.log(Array);

Was, wenn ich zum Beispiel 10.000 Objekte in diesem Array. Ist es so schlecht für die Leistung?

+0

"Besser" und "Simpler" sind ziemlich subjektiv. – Jamiec

+0

Ich aktualisiere Frage, die ich wegen der Leistung frage, wenn Sie größere Daten in einem Array haben. –

+4

Was Sie tun, ist in Bezug auf Lesbarkeit und Leistung in Ordnung. – Bergi

Antwort

0

Kompaktere und gleiche perfomance:

var Obj = { 
 
    ID: "27374b25-a97b-4676-889b-32d87087c72d", 
 
    Name: "Kenny J. Jones", 
 
    City: "Dallas, TX" 
 
}; 
 
var myArray = [{ 
 
    ID: "27374b25-a97b-4676-889b-32d87087c72d", 
 
    Name: "Kenny J. Jones", 
 
    City: "Dallas, TX" 
 
    }, 
 
    { 
 
    ID: "50d861e8-793f-4d6c-87f4-09cf7312310f", 
 
    Name: "Denise L. Demeo", 
 
    City: "Pine, LA 70438" 
 
    }, 
 
    { 
 
    ID: "95a03cda-5f26-4b60-b070-e92885f1a9b7", 
 
    Name: "Jose A. Steed", 
 
    City: "Florence, SC 29501" 
 
    } 
 
]; 
 

 
myArray.filter(x => x.ID === Obj.ID).forEach(x => { 
 
    x.Person = true; 
 
}); 
 

 
console.log(myArray)

0

Weitere Optimierung, Bitte verwenden Sie Pause, sobald Sie das Spiel

var end = Array.length; 
var i = 0 
for (i; i < end i++) { 
    if (Obj.ID === Array[i].ID) { 
    Array[i].Person = true; 
    break; 
    } 
} 
+0

Native Code immer schnell laufen –

+0

Ihre Rückkehr sollte eine Pause sein; ;) –

+0

@DanielZiegler: danke, das habe ich wegen Eile verpasst –

0
const obj = { 
    Id: "27374b25-a97b-4676-889b-32d87087c72d", 
    Name: "Kenny J. Jones", 
    City: "Dallas, TX" 
}; 

const arr = [ 
    { 
    Id: "27374b25-a97b-4676-889b-32d87087c72d", 
    Name: "Kenny J. Jones", 
    City: "Dallas, TX" 
    }, 
    { 
    Id: "50d861e8-793f-4d6c-87f4-09cf7312310f", 
    Name: "Denise L. Demeo", 
    City: "Pine, LA 70438" 
    }, 
    { 
    Id: "95a03cda-5f26-4b60-b070-e92885f1a9b7", 
    Name: "Jose A. Steed", 
    City: "Florence, SC 29501" 
    } 
]; 
bekommen

Verwenden Sie zuerst die Methode Array.prototype.findIndex(), um festzustellen, ob einer der arr Einträge den gleichen genauen Id wie der obj hat. Der Vorteil dieser Methode besteht darin, dass sie nicht mehr sucht, sobald eine Übereinstimmung gefunden wurde.

const index = arr.findIndex(entry => entry.Id === obj.Id); 

Wenn es eine Übereinstimmung gibt, würde index speichern die Position des Spiels, die verwendet werden können @ dieser Stelle einen Schlüssel von person zum Objekt hinzufügen und es auf true gesetzt.

if(index !== -1) { 
    arr[index].person = true; 
} 

console.log(arr);