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?
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"});
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
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 .