我是Underscore js的新手,对如何使用它感到困惑。我有一系列的目标'我希望通过ID找到其中一个。
这里是数据:
{"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"
}
...
]}
这就是我尝试的内容,我希望得到整个数组/对象,以便我可以得到它的每一个字段:
var goalId = 1;
_.each(result.goal, function(item){
_.find(result.goal, function(i){
return i = goalId;
});
});
知道该怎么做吗?
答案 0 :(得分:91)
这是2016年,我们可能不需要下划线才能实现这一目标。使用Array.prototype.find()
。如果数组中的元素满足提供的测试函数,它将返回数组中的值。否则返回undefined。
// 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'
浏览器支持
--------------------------------------------
| Chrome | Firefox | Safari | IE | Opera |
|--------|---------|--------|------|-------|
| 45 | 25 | 7.1 | Edge | 32 |
--------------------------------------------
有关MDN
上的填充的更多信息 更新:我发现_.where
始终返回一个数组。 _.findWhere
返回它找到的第一个对象,因此如果您希望返回一个对象,最好使用它。
您可以使用_.where
这样会更容易。
如果是这样的话:
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"
}
]
您可以使用以下内容:
var filteredGoal = _.where(goal, {id: "1"});
答案 1 :(得分:21)
您正在使用对象阵列。因此,您可以使用:_。 findWhere (查看列表并返回与所有键值对匹配的第一个值)以获取所有属性在id或其他关键属性上。
var some= [
{Employee:'ved',id:20},
{Employee:"ved",age:25},
{Employee:"p",age:2}
];
var a = _.findWhere(some,{id:20});
console.log('searchResult',a);
要获取索引,您可以使用以下内容:
var b = _.indexOf(some,a);
console.log('index',b);
如果您需要所有使用清单 ,
尝试: _。其中 (它查看数组中的每个匹配项,返回包含键值对的所有值的数组在物业中列出。)
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:它仅用于检查值,而不是Key-value。
访问文档:_.find
答案 2 :(得分:15)
简化了您的数据模型,但是这样的东西?
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);
您可以在此jsFiddle中看到这一点。