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?
JavaScript Array find() The find() method returns the value of the first element that passes a test.
Lodash and Underscore are great modern JavaScript utility libraries, and they are widely used by Front-end developers.
The _. template() function is an inbuilt function in the Underscore. js library of JavaScript which is used to compile JavaScript templates into functions that can be evaluated for rendering. Useful for rendering complicated bits of HTML from JSON data sources.
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"});
You are using Array of objects. So,you can use: _.findWhere(Looks through the list and returns the first value that matches all of the key-value pairs ) to get the all the properties based on id or other key attribute.
var some= [ {Employee:'ved',id:20}, {Employee:"ved",age:25}, {Employee:"p",age:2} ]; var a = _.findWhere(some,{id:20}); console.log('searchResult',a);
To get the index, you can use something like this:
var b = _.indexOf(some,a); console.log('index',b);
If you need all list of uses,
TRY: _.where(It looks through each occurrence in the array, returning an array of all the values that contain the key-value pairs listed in properties.)
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: It is used to check the value only, not Key-value both.
Visit Docs:_.find
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With