web-dev-qa-db-fra.com

Souligner js trouver un élément par ID

Je suis nouveau sur Underscore js et peu confus sur la façon de l'utiliser. J'ai une collection de "buts" et je veux en trouver un par ID.

voici les données:

{"goal":[
    {
        "category" : "education",
        "title" : "Charlie University",
        "description" : "Lorem ipsum dolor sit amet",
        "date" : "01/03/2020",
        "value" : 50000,
        "achievability" : 3,
        "experimental_achievability": 3,
        "suggested": false,
        "accounts": [
            {
                ...
            },
            {
                ...
            }
        ],
        "articles": [
            {
                ...
            },
            {
                ...
            },
            {
                ...
            }
        ],
        "related_goals": [
            {
                ...
            }
        ],
        "id":"1"
    },
    {
        "category" : "family",
        "title" : "Getting married",
        "description" : "Lorem ipsum dolor sit amet",
        "date" : "01/03/2022",
        "value" : 10000,
        "achievability" : 3,
        "experimental_achievability": 2,
        "suggested": true,
        "accounts": [
            {
                ...
            }
        ],
        "articles": [
            {
                ...
            },
            {
                ...
            },
            {
                ...
            }
        ],
        "related_goals": [
            {
                ...
            }
        ],
        "id":"2"
    }
    ...
]}

C'est ce que j'essaie, je veux obtenir l'ensemble du tableau/objet afin que je puisse obtenir chaque champ de celui-ci:

var goalId = 1;
_.each(result.goal, function(item){
    _.find(result.goal, function(i){
         return i = goalId;
    });
});

Une idée de comment faire?

36
Mauro74

Mise à jour

Nous sommes en 2016 et nous n'aurons peut-être pas vraiment besoin de souligner pour y parvenir. Utilisation de Array.prototype.find(). Il renvoie une valeur dans le tableau, si un élément du tableau satisfait la fonction de test fournie. Sinon, undefined est renvoyé.

  // Underscore
  var users = [
    { 'user': 'barney',  'age': 36, 'active': true },
    { 'user': 'fred',    'age': 40, 'active': false },
    { 'user': 'pebbles', 'age': 1,  'active': true }
  ]

  _.find(users, function (o) { return o.age < 40; })
  // output: object for 'barney'

  // Native
  var users = [
    { 'user': 'barney',  'age': 36, 'active': true },
    { 'user': 'fred',    'age': 40, 'active': false },
    { 'user': 'pebbles', 'age': 1,  'active': true }
  ]

  users.find(function (o) { return o.age < 40; })
  // output: object for 'barney'

Prise en charge du navigateur

--------------------------------------------
| Chrome | Firefox | Safari |  IE  | Opera |
|--------|---------|--------|------|-------|
|   45   |    25   |  7.1   | Edge |  32   |
--------------------------------------------

Plus d'informations sur un polyfill sur MDN


Mise à jour : j'ai trouvé que _.where renvoie toujours un tableau. _.findWhere renvoie le premier objet trouvé, il sera donc préférable de l'utiliser si vous attendez un seul objet en retour.


Vous pouvez utiliser _.where C'est beaucoup plus facile.

Si c'est quelque chose comme ça:

var goal  = [

    {
        "category" : "education",
        "title" : "Charlie University",
        "description" : "Lorem ipsum dolor sit amet",
        "date" : "01/03/2020",
        "value" : 50000,
        "achievability" : 3,
        "experimental_achievability": 3,
        "suggested": false,
        "accounts": [],
        "articles": [],
        "related_goals": [],
        "id":"1"
    },
    {
        "category" : "education",
        "title" : "Charlie University",
        "description" : "Lorem ipsum dolor sit amet",
        "date" : "01/03/2020",
        "value" : 50000,
        "achievability" : 3,
        "experimental_achievability": 3,
        "suggested": false,
        "accounts": [],
        "articles": [],
        "related_goals": [],
        "id":"2"
    },
    {
        "category" : "education",
        "title" : "Charlie University",
        "description" : "Lorem ipsum dolor sit amet",
        "date" : "01/03/2020",
        "value" : 50000,
        "achievability" : 3,
        "experimental_achievability": 3,
        "suggested": false,
        "accounts": [],
        "articles": [],
        "related_goals": [],
        "id":"3"
    },
    {
        "category" : "education",
        "title" : "Charlie University",
        "description" : "Lorem ipsum dolor sit amet",
        "date" : "01/03/2020",
        "value" : 50000,
        "achievability" : 3,
        "experimental_achievability": 3,
        "suggested": false,
        "accounts": [],
        "articles": [],
        "related_goals": [],
        "id":"4"
    }
]

Vous pouvez utiliser quelque chose comme:

var filteredGoal = _.where(goal, {id: "1"});
91
Ahmad Alfy

Vous utilisez un tableau d'objets. Ainsi, vous pouvez utiliser: _. findWhere (parcourt la liste et renvoie la première valeur qui correspond à tous les paires clé-valeur) pour obtenir toutes les propriétés en fonction de l'id ou d'un autre attribut de clé.

var some= [
             {Employee:'ved',id:20}, 
             {Employee:"ved",age:25},
             {Employee:"p",age:2}
          ];

var a = _.findWhere(some,{id:20});
console.log('searchResult',a);

Pour obtenir l'index, vous pouvez utiliser quelque chose comme ceci:

var b = _.indexOf(some,a);
console.log('index',b);

Si vous avez besoin de toute la liste des utilisations,
[~ # ~] essayez [~ # ~] : _. où (Il examine chaque occurrence du tableau, renvoyant un tableau de toutes les valeurs qui contiennent les paires clé-valeur répertoriées dans les propriétés.)

var some= [ 
            {Employee:"ved",id:20}, 
            {Employee:"ved prakash",id:20},
            {Employee:"anyone",id:2}
          ];
var a = _.where(some,{id:25});
    console.log('searchResult',a);

_.find: Il est utilisé pour vérifier la valeur uniquement, pas la valeur-clé à la fois.


Visitez Docs: _. Find

21
Ved

Vous avez simplifié votre modèle de données, mais quelque chose comme ça?

var goals = [{id:1, name:'Goal1'},
             {id:2, name:'Goal2'},
             {id:3, name:'Goal3'}];

function getGoal(id) {
    return _.find(goals, function(goal) {
        return goal.id === id;
    });
}

alert(getGoal(2).name);

Vous pouvez le voir en action dans ce jsFiddle .

15
Gwyn Howell