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.
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.
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).
façon classique est encore plus simple
essayer
var output = arr.filter(function(value){ return value.city=="Amsterdam";})
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>");