Underscore js find item by ID

前端 未结 3 538
滥情空心
滥情空心 2020-12-13 17:34

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:

{         


        
3条回答
  •  伪装坚强ぢ
    2020-12-13 18:22

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

提交回复
热议问题