Mes objets:
[
{
description: 'object1', id: 1
},
{
description: 'object2', id: 2
}
{
description: 'object3', id: 3
}
{
description: 'object4', id: 4
}
]
Dans ma fonction ci-dessous, je passe la description pour trouver l'identifiant correspondant:
function pluckSavedView(action, view) {
console.log('action: ', action);
console.log('pluckSavedView: ', view); // view = 'object1'
var savedViews = retrieveSavedViews();
console.log('savedViews: ', savedViews);
if (action === 'delete') {
var delete_id = _.result(_.find(savedViews, function(description) {
return description === view;
}), 'id');
console.log('delete_id: ', delete_id); // should be '1', but is undefined
}
}
J'essaie d'utiliser la méthode de recherche de lodash: https://lodash.com/docs#find
Cependant, ma variable delete_id
est indéfinie.
Mise à jour pour les personnes vérifiant cette question, Ramda est une bibliothèque agréable permettant de faire la même chose que lodash, mais de manière plus fonctionnelle :) - http://ramdajs.com/0.21.0/docs/
L'argument transmis au rappel est l'un des éléments du tableau. Les éléments de votre tableau sont des objets de la forme {description: ..., id: ...}
.
var delete_id = _.result(_.find(savedViews, function(obj) {
return obj.description === view;
}), 'id');
Encore une alternative aux documents auxquels vous avez lié (lodash v3):
_.find(savedViews, 'description', view);
Lodash v4:
_.find(savedViews, ['description', view]);
lodash et ES5
var song = _.find(songs, {id:id});
lodash et ES6
let song = _.find(songs, {id});
docs à https://lodash.com/docs#find
Vous pouvez le faire facilement dans Vanilla JS:
Utilisation de find
const savedViews = [{"description":"object1","id":1},{"description":"object2","id":2},{"description":"object3","id":3},{"description":"object4","id":4}];
const view = 'object2';
const delete_id = savedViews.find(obj => {
return obj.description === view;
}).id;
console.log(delete_id);
Utilisation de filter
(réponse originale)
const savedViews = [{"description":"object1","id":1},{"description":"object2","id":2},{"description":"object3","id":3},{"description":"object4","id":4}];
const view = 'object2';
const delete_id = savedViews.filter(function (el) {
return el.description === view;
})[0].id;
console.log(delete_id);
Avec la méthode find
, la valeur de chaque élément sera transmise à votre rappel, comme suit:
{
description: 'object1', id: 1
}
Ainsi, vous voulez un code comme:
_.find(savedViews, function(o) {
return o.description === view;
})
Vous n'avez pas besoin de Lodash, Ramda ou de toute autre dépendance supplémentaire.
Utilisez simplement la fonction ES6 find () de manière fonctionnelle:
savedViews.find(el => el.description === view)
Parfois, vous devez utiliser des bibliothèques tierces pour obtenir tous les bonus qui les accompagnent. Cependant, en règle générale, essayez d'éviter les dépendances lorsque vous n'en avez pas besoin. Les dépendances peuvent:
var delete_id = _(savedViews).where({ description : view }).get('0.id')
pour cela, trouver l’objet donné dans un tableau, exemple d’utilisation de base de _.find
const array =
[
{
description: 'object1', id: 1
},
{
description: 'object2', id: 2
},
{
description: 'object3', id: 3
},
{
description: 'object4', id: 4
}
];
cela fonctionnerait bien
q = _.find(array, {id:'4'}); // delete id
console.log(q); // {description: 'object4', id: 4}
_.find aidera à renvoyer un élément dans un tableau plutôt que son index. Donc, si vous avez un tableau d’objets et que vous voulez rechercher un seul objet dans le tableau avec une certaine valeur de clé, pare _.find est le bon outil pour le travail.
Vous pouvez utiliser ce qui suit
import { find } from 'lodash'
Ensuite, pour renvoyer l’intégralité de l’objet (pas seulement sa clé ou sa valeur) dans la liste avec les éléments suivants:
let match = find(savedViews, { 'ID': 'id to match'});
Importer lodash
en utilisant
$ npm i --save lodash
var _ = require('lodash');
var objArrayList =
[
{ name: "user1"},
{ name: "user2"},
{ name: "user2"}
];
var Obj = _.find(objArrayList, { name: "user2" });
// Obj ==> { name: "user2"}
Récupérer l'identifiant en se basant sur le nom
{
"roles": [
{
"id": 1,
"name": "admin",
},
{
"id": 3,
"name": "manager",
}
]
}
fetchIdBasingOnRole() {
const self = this;
if (this.employee.roles) {
var roleid = _.result(
_.find(this.getRoles, function(obj) {
return obj.name === self.employee.roles;
}),
"id"
);
}
return roleid;
},