Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Underscore js find item by ID

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?

like image 676
Mauro74 Avatar asked Oct 05 '12 10:10

Mauro74


People also ask

What is _ find in JavaScript?

JavaScript Array find() The find() method returns the value of the first element that passes a test.

Is underscore js still used?

Lodash and Underscore are great modern JavaScript utility libraries, and they are widely used by Front-end developers.

What is _ template?

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.


2 Answers

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"}); 
like image 67
Ahmad Alfy Avatar answered Sep 21 '22 15:09

Ahmad Alfy


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

like image 37
Ved Avatar answered Sep 21 '22 15:09

Ved