Underscore JS通过ID检索对象

时间:2015-09-22 10:32:44

标签: angularjs underscore.js

我有一个输入,我想通过ID找到一个对象。目前我正在返回两个对象,但我想要的是如果我搜索' 01'我只会返回第一个对象。我已经尝试过下划线_.map来做到这一点,但它没有给出我追求的结果。

var getById = function() {
    var deferred = Q.defer(),
        result;

    result = items;

    if (!result) {
        deferred.reject('item not found');
    } else {
        deferred.resolve(result);
    }

    return deferred.promise;
};

JSON:

[{
  "id": "01",
  "name": "test1",
  "orderItems": [
    {
      "productNumber": "TESTa",
      "quantity": 2,
    },
    {
      "productNumber": "TESTb",
      "quantity": 4,
    },
    {
      "productNumber": "TESTc",
      "quantity": 6,
    }
  ]
},{
  "id": "02",
  "name": "test2",
  "orderItems": [
    {
      "productNumber": "TESTe",
      "quantity": 2,
    },
    {
      "productNumber": "TESTf",
      "quantity": 7,
    },
    {
      "productNumber": "TESTg",
      "quantity": 6,
    }
  ]
}]

3 个答案:

答案 0 :(得分:1)

您可以使用_.filter()

  

查看列表中的每个值,返回通过真值测试(谓词)的所有值的数组。

result = _.filter(items, function(item){
    return item.id == '01';
});

或者,_.findWhere

  

查看列表并返回与属性中列出的所有键值对匹配的第一个值。

result  = _.findWhere(items, {id : '01'});

答案 1 :(得分:1)

var result = _.find(myItems, function(item) { return item.id === '01'; }

答案 2 :(得分:1)

如果您发现符合条件的单项,请使用 _。find()

  

查看列表中的每个值,返回第一个值   通过真相测试

         var _exist = _.find(_items, function (item) {
             return item.id == your_id;
            });

如果您找到符合条件的所有项目,请使用 _。过滤器()

  

查看列表中的每个值,返回所有的数组   通过真值测试的价值

var _exist = _.filter(_items, function (item) {
                 return item.id == your_id;
                });

在此处抓取完整的文档: http://underscorejs.org/