web-dev-qa-db-fra.com

Comment utiliser lodash pour trouver et retourner un objet de Array?

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/

128
Leon Gaban

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]);
150
Felix Kling

lodash et ES5

var song = _.find(songs, {id:id});

lodash et ES6

let song = _.find(songs, {id});

docs à https://lodash.com/docs#find

181
danday74

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);
25
Andy

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;
})
10
Dancrumb

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:

  • gonfler la taille de votre code fourni,
  • vous devrez les tenir à jour,
  • et ils peuvent introduire des bugs ou des risques de sécurité
6
xeiton
var delete_id = _(savedViews).where({ description : view }).get('0.id')
6
robertklep

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.

6
Afaq Ahmed Khan

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'});
5
Bican M. Valeriu

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"}
1
ABHIJEET KHIRE

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;
        },