1260 Stimmen

Holen Sie sich das JavaScript-Objekt aus einem Array von Objekten nach dem Wert einer Eigenschaft

Angenommen, ich habe ein Array von vier Objekten:

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

Gibt es eine Möglichkeit, das dritte Objekt ({a: 5, b: 6}) beispielsweise nach dem Wert der Eigenschaft b zu erhalten, ohne eine for...in-Schleife zu verwenden?

30voto

asrulsibaoel Punkte 491

Siehe diese Dokumentation Array.prototype.find()

Beispiel:

var inventory = [
    {name: 'Äpfel', quantity: 2},
    {name: 'Bananen', quantity: 0},
    {name: 'Kirschen', quantity: 5}
];

function findCherries(fruit) { 
    return fruit.name === 'Kirschen';
}

console.log(inventory.find(findCherries)); 
// { name: 'Kirschen', quantity: 5 }

23voto

maia Punkte 3644

Mit underscore.js verwenden:

var foundObject = _.findWhere(jsObjects, {b: 6});

21voto

Amir Punkte 720

Es sieht so aus, als ob im ECMAScript 6-Vorschlag die Array-Methoden find() und findIndex() enthalten sind. MDN bietet auch Polyfills an, die du einbinden kannst, um die Funktionalität dieser Methoden in allen Browsern zu erhalten.

find():

function isPrime(element, index, array) {
    var start = 2;
    while (start <= Math.sqrt(element)) {
        if (element % start++ < 1) return false;
    }
    return (element > 1);
}

console.log( [4, 6, 8, 12].find(isPrime) ); // undefined, nicht gefunden
console.log( [4, 5, 8, 12].find(isPrime) ); // 5

findIndex():

function isPrime(element, index, array) {
    var start = 2;
    while (start <= Math.sqrt(element)) {
        if (element % start++ < 1) return false;
    }
    return (element > 1);
}

console.log( [4, 6, 8, 12].findIndex(isPrime) ); // -1, nicht gefunden
console.log( [4, 6, 7, 12].findIndex(isPrime) ); // 2

19voto

Sam Dushay Punkte 301

Wenn Sie nach einem einzelnen Ergebnis suchen, anstatt nach einem Array, darf ich reduce vorschlagen?

Hier ist eine Lösung in einfachem Javascript, die ein übereinstimmendes Objekt zurückgibt, wenn eines existiert, oder null, wenn nicht.

var result = arr.reduce(function(prev, curr) { return (curr.b === 6) ? curr : prev; }, null);

18voto

nickf Punkte 517253

Wenn ich das richtig verstehe, möchtest du das Objekt im Array finden, dessen b Eigenschaft 6 ist?

var found;
jsObjects.some(function (obj) {
  if (obj.b === 6) {
    found = obj;
    return true;
  }
});

Oder wenn Sie Underscore verwendet haben:

var found = _.select(jsObjects, function (obj) {
  return obj.b === 6;
});

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X