web-dev-qa-db-fra.com

NodeJS recherche un objet dans un tableau avec la valeur d'une clé

J'essaie d'obtenir un objet dans un tableau avec la valeur de l'une de ses clés.

Le tableau:

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

J'ai essayé de faire quelque chose comme ça avec lodash mais sans succès.

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

et il retourne un objet vide.

Avez-vous une idée de la façon dont je peux procéder de la manière lodash (si possible)? Je peux le faire de manière classique, en créant un nouveau tableau, en parcourant tous les objets et en poussant ceux qui correspondent à mes critères dans ce nouveau tableau. Mais existe-t-il un moyen de le faire avec lodash?

Ce n'est pas un doublon.

14
Ariel Weinberger

En utilisant lodash et une fonction de flèche, cela devrait être aussi simple que;

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

... ou alternativement avec la notation d'objet;

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

Remarque: Auparavant, la réponse ci-dessus était basée sur pickBy, ce qui, comme @torazaburo l'a souligné ci-dessous, n'était pas un bon choix pour le cas d'utilisation.

12
Joachim Isaksson

Vous pouvez utiliser Array.prototype.find () avec du javascript pur:

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

Ce n'est actuellement pas compatible avec tous les navigateurs, vous devez le vérifier dans votre environnement (mais cela devrait fonctionner dans NodeJS).

61
madox2

façon classique est encore plus simple

essayer

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

Vous pouvez utiliser Array.filter

Comme correctement indiqué par @torazaburo, vous n'avez pas besoin de l'opérateur ternaire return item[key]?item[key] === value:false. Un simple contrôle return item[key] === value ira bien.

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>");
2
Rajesh