Frage NodeJS findet Objekt im Array nach dem Wert eines Schlüssels [duplizieren]


Diese Frage hat hier bereits eine Antwort:

Ich versuche, ein Objekt in einem Array durch den Wert eines seiner Schlüssel zu erhalten.

Das Array:

var arr = [
        {
            city: 'Amsterdam',
            title: 'This is Amsterdam!'
        },
        {
            city: 'Berlin',
            title: 'This is Berlin!'
        },
        {
            city: 'Budapest',
            title: 'This is Budapest!'
        }
];

Ich habe versucht, so etwas mit lodash aber kein Erfolg.

var picked = lodash.pickBy(arr, lodash.isEqual('Amsterdam');

und es gibt ein leeres Objekt zurück.

Irgendeine Idee, wie ich das auf die Weise machen kann (wenn es überhaupt möglich ist)? Ich kann es auf die klassische Art und Weise tun, indem ich ein neues Array erstelle, alle Objekte durchlaufe und diejenigen, die meinen Kriterien entsprechen, auf dieses neue Array verschiebe. Aber gibt es einen Weg, es mit lodash zu machen?

Dies ist kein Duplikat.


9
2018-03-28 09:57


Ursprung


Antworten:


Mit Lodash und einer Pfeilfunktion sollte es so einfach wie sein;

var picked = lodash.filter(arr, x => x.city === 'Amsterdam');

... oder alternativ mit Objektnotation;

var picked = lodash.filter(arr, { 'city': 'Amsterdam' } );

Hinweis: Die obige Antwort basiert auf pickBy, was als @torazaburo unten hervorhebt, war keine gute Wahl für den Anwendungsfall.


10
2018-03-28 10:08



Sie können verwenden Array.prototype.find () mit reinem Javascript:

var picked = arr.find(o => o.city === 'Amsterdam');

Es ist derzeit nicht kompatibel Mit allen Browsern müssen Sie es in Ihrer Umgebung überprüfen (aber es sollte in NodeJS funktionieren).


34
2018-03-28 10:00



Der klassische Weg ist noch einfacher

Versuchen

var output = arr.filter(function(value){ return value.city=="Amsterdam";})

2
2018-03-28 10:00



Sie können verwenden Array.filter

Wie von @torazaburo richtig angezeigt, benötigen Sie keinen ternären Operator return item[key]?item[key] === value:false. Eine einfache Überprüfung return item[key] === value geht es gut.

var arr = [{
  city: 'Amsterdam',
  title: 'This is Amsterdam!'
}, {
  city: 'Berlin',
  title: 'This is Berlin!'
}, {
  city: 'Budapest',
  title: 'This is Budapest!'
}];

Array.prototype.findByValueOfObject = function(key, value) {
  return this.filter(function(item) {
    return (item[key] === value);
  });
}

document.write("<pre>" + JSON.stringify(arr.findByValueOfObject("city", "Amsterdam"), 0, 4) + "</pre>");


1
2018-03-28 10:03