2015-09-22 29 views
0

我有一個輸入,我想通過ID找到一個對象。目前我正在返回兩個對象,但我想要的是如果我搜索'01',我只會返回第一個對象。我已經嘗試了下劃線_.map來做到這一點,但它沒有給我後面的結果。下劃線JS通過ID檢索對象

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

回答

1

可以使用_.filter()

看起來通過列表中的每個值,返回該通過一個道理試驗(謂詞)的所有值的數組。

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

或者,_.findWhere

看起來列表並返回匹配所有屬性中列出的鍵值對的第一個值。

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

也就是說真正有用的,怎麼w ^我應該這樣做,所以我不會硬編碼'01',而是取決於我輸入哪一個會給我正確的結果? – Pianoc

+0

@Pianoc,你可以用一個變量代替'01'。 – Satpal

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

如果找到相匹配的條件單個項目,使用_.find()

它看起來通過列表中的每個值,返回第一個 通過真相測試

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

如果找到相匹配條件的所有項目,請使用_.filter()

它看起來通過列表中的每個值,返回的是傳遞了一個道理測試的所有 值的數組

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

趕上完整的文檔在這裏: http://underscorejs.org/