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?

14voto

Shobhit Sharma Punkte 485

Sie können es auch mit der Pfeilfunktion wie unten gezeigt verwenden:

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

var Ergebnis = demoArray.filter( obj => obj.name === 'Äpfel')[0];
console.log(Ergebnis);
// {name: 'Äpfel', Menge: 2}

11voto

Simple-Solution Punkte 4081

Was hältst du davon, _.find(collection, [predicate=_.identity], [fromIndex=0]) von lo-dash zu verwenden, um ein Objekt aus einem Array von Objekten nach dem Wert einer Objekteigenschaft zu erhalten. Du könntest etwas wie folgt machen:

var o = _.find(jsObjects, {'b': 6});

Argumente:

collection (Array|Object): Die zu untersuchende Sammlung.
[predicate=_.identity] (Function): Die pro Iteration aufgerufene Funktion.
[fromIndex=0] (number): Der Index, ab dem gesucht werden soll.

Rückgabewert

(*): Gibt das übereinstimmende Element zurück (in deinem Fall {a: 5, b: 6}), ansonsten undefined.

In Bezug auf die Leistungsfähigkeit ist _.find() schneller, da es nur das erste Objekt mit der Eigenschaft {'b': 6} zieht. Andererseits, wenn angenommen in deinem Array mehrere Objekte mit übereinstimmenden Sätzen von Eigenschaften (Schlüssel:Wert) enthalten sind, solltest du die Methode _.filter() in Betracht ziehen. In deinem Fall, da dein Array nur ein Objekt mit dieser Eigenschaft enthält, würde ich _.find() verwenden.

8voto

Andrew Punkte 15913

Den besten/schnellsten Teil dieser Antwort verbessert und klarer gemacht:

function getElByPropVal(myArray, prop, val){
    for (var i = 0, length = myArray.length; i < length; i++) {
        if (myArray[i][prop] == val){
            return myArray[i];
        }
    }
}

6voto

Died Punkte 131
var result = jsObjects.filter(x=> x.b === 6);

wird besser sein, indem Sie manchmal return in filter verwenden, können Sie kein Ergebnis erhalten (ich weiß nicht warum)

3voto

kolodi Punkte 992

Um das erste Objekt aus einem Array von Objekten mit einem bestimmten Eigenschaftswert zu erhalten:

function getObjectFromObjectsArrayByPropertyValue(objectsArray, propertyName, propertyValue) {
  return objectsArray.find(function (objectsArrayElement) {
    return objectsArrayElement[propertyName] == propertyValue;
  });
}

function findObject () {
  var arrayOfObjectsString = document.getElementById("arrayOfObjects").value,
      arrayOfObjects,
      propertyName = document.getElementById("propertyName").value,
      propertyValue = document.getElementById("propertyValue").value,
      preview = document.getElementById("preview"),
      searchingObject;

  arrayOfObjects = JSON.parse(arrayOfObjectsString);

  console.debug(arrayOfObjects);

  if(arrayOfObjects && propertyName && propertyValue) {
    searchingObject = getObjectFromObjectsArrayByPropertyValue(arrayOfObjects, propertyName, propertyValue);
    if(searchingObject) {
      preview.innerHTML = JSON.stringify(searchingObject, false, 2);
    } else {
      preview.innerHTML = "es gibt kein Objekt mit der Eigenschaft " + propertyName + " = " + propertyValue + " in Ihrem Array von Objekten";
    }
  }
}

pre {
  padding: 5px;
  border-radius: 4px;
  background: #f3f2f2;
}

textarea, button {
  width: 100%
}

  Eingabedaten:
  Hier Ihren Array von Objekten einfügen
    [
    {"a": 1, "b": 2},
    {"a": 3, "b": 4},
    {"a": 5, "b": 6},
    {"a": 7, "b": 8, "c": 157}
  ]

  Eigenschaftsname:  
  Eigenschaftswert:  

Objekt im Array finden!

  Suchergebnis:
  klicken Sie auf Finden

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