Sunday, May 19, 2024
55
rated 0 times [  56] [ 1]  / answers: 1 / hits: 102896  / 12 Years ago, fri, october 5, 2012, 12:00:00

I'm new to Underscore js and bit confused on how to use it. I have a collection of 'goals' and I want to find one of it by ID.



here's the data:



{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
}
...
]}


That's what I'm trying, I want to get the entire array/object so I can get each field of it:



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


Any idea how to do it?


More From » underscore.js

 Answers
34

Update


It's 2016 and we might not acutally need underscore to achieve that. Using Array.prototype.find(). It returns a value in the array, if an element in the array satisfies the provided testing function. Otherwise undefined is returned.


  // 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'

Browser support


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

More information an polyfill on MDN




Update: I found that _.where always returns an array. _.findWhere returns the first object it finds so it will be better to use if you expect a single object in return.




You can use _.where It's much easier.


If it's something like this :


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"
}
]

You can use something like :


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

[#82737] Wednesday, October 3, 2012, 12 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
kaylinshayd

Total Points: 443
Total Questions: 104
Total Answers: 111

Location: Nauru
Member since Wed, Mar 29, 2023
1 Year ago
;