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?

1755voto

elclanrs Punkte 90473

Filter Array von Objekten, dessen Eigenschaft Wert entspricht, gibt Array zurück:

var result = jsObjects.filter(obj => {
  return obj.b === 6
})

Siehe die MDN Docs zum Array.prototype.filter()

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

let result = jsObjects.filter(obj => {
  return obj.b === 6
})

console.log(result)

Finde den Wert des ersten Elements/Objekts im Array, sonst wird undefined zurückgegeben.

var result = jsObjects.find(obj => {
  return obj.b === 6
})

Siehe die MDN Docs zum Array.prototype.find()

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

let result = jsObjects.find(obj => {
  return obj.b === 6
})

console.log(result)

472voto

Michał Perłakowski Punkte 79585
jsObjects.find(x => x.b === 6)

Von MDN:

Die find()-Methode gibt einen Wert im Array zurück, wenn ein Element im Array die bereitgestellte Testfunktion erfüllt. Andernfalls wird undefined zurückgegeben.


Anmerkung: Methoden wie find() und Pfeilfunktionen werden von älteren Browsern (wie dem IE) nicht unterstützt. Wenn Sie diese Browser unterstützen möchten, sollten Sie Ihren Code mit Babel transpilieren.

196voto

RobG Punkte 133037

Ich weiß nicht, warum du gegen eine for-Schleife bist (vermutlich meintest du eine for-Schleife, nicht speziell for..in), sie sind schnell und einfach zu lesen. Wie auch immer, hier sind einige Optionen.

For-Schleife:

function getByValue(arr, value) {

  for (var i=0, iLen=arr.length; i

`

.filter

function getByValue2(arr, value) {

  var result  = arr.filter(function(o){return o.b == value;} );

  return result? result[0] : null; // oder undefined

}

.forEach

function getByValue3(arr, value) {

  var result = [];

  arr.forEach(function(o){if (o.b == value) result.push(o);} );

  return result? result[0] : null; // oder undefined

}

Wenn du andererseits wirklich for..in gemeint hast und ein Objekt mit einer Eigenschaft mit dem Wert 6 finden möchtest, dann musst du for..in verwenden, es sei denn, du übergibst die zu überprüfenden Namen.

Beispiel

function getByValue4(arr, value) {
  var o;

  for (var i=0, iLen=arr.length; i

`

74voto

Rohìt Jíndal Punkte 15250

Möglichkeiten, die Anforderung zu erfüllen :

  1. Verwendung der Array.find() Methode :

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

    const filteredResult = jsObject.find((e) => e.b == 6);

    console.log(filteredResult);

  2. Verwendung der Array.filter() Methode :

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

    const filterObj = jsObjects.filter((e) => e.b == 6);

    console.log(filterObj[0]);

  3. Verwendung der for...in Schleife :

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

    for (const i in jsObjects) { if (jsObjects[i].b == 6) { console.log(jsObjects[i]); } }

33voto

Alireza Punkte 92209

OK, es gibt mehrere Möglichkeiten, das zu tun, aber lassen Sie uns mit der einfachsten und neuesten Methode beginnen, dies zu tun, diese Funktion wird find() genannt.

Sei einfach vorsichtig, wenn du find benutzt, denn selbst IE11 unterstützt es nicht, also muss es transpiliert werden...

du hast also dieses Objekt, wie du gesagt hast:

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

und du kannst eine Funktion schreiben und es so bekommen:

function filterValue(obj, key, value) {
  return obj.find(function(v){ return v[key] === value});
}

und die Funktion so verwenden:

filterValue(jsObjects, "b", 6); //{a: 5, b: 6}

Auch in ES6 für eine noch kürzere Version:

const filterValue = (obj, key, value)=> obj.find(v => v[key] === value);

Diese Methode gibt nur den ersten Wert zurück, der übereinstimmt..., für ein besseres Ergebnis und Browserunterstützung, können Sie filter verwenden:

const filterValue = (obj, key, value)=> obj.filter(v => v[key] === value);

und wir werden [{a: 5, b: 6}] zurückgeben...

Diese Methode gibt stattdessen ein Array zurück...

Es ist auch möglich, eine einfache for-Schleife zu verwenden, um eine Funktion wie diese zu erstellen:

function filteredArray(arr, key, value) {
  const newArray = [];
  for(i=0, l=arr.length; i

`und rufe es auf wie folgt:

filteredArray(jsObjects, "b", 6); //[{a: 5, 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