2015-03-31 72 views
1

,我有以下對象數組:獲取一個對象謂詞在Javascript

var objs = [{id: 1, name: 'foo', ...}, 
      {id: 2, name: 'bar', ...}, 
      {id: 3, name: 'baz', ...}]; 

和這個變量:

var matcher = 'bar'; 

什麼是讓對象最簡單的方法matcher等於它的name

使用此matcher結果應該是:

{id: 2, name: 'bar', ...} 
+0

@Vohuman您的重複引用是從'12歲。技術正在不斷髮展並提供新的解決方案。請在弄髒我的帖子之前,花點時間採取行動。 – user544262772 2015-03-31 14:10:45

+0

其中一個答案建議'$ .grep',另一個建議'Array.prototype.filter'。開發人員仍然使用它們。你只是想過濾一個數組中的對象,一個簡單的,非常古老的for循環也可以做到這一點。沒有必要使用2015年的技術。標記爲重複的點不是「解決」一個問題。 – undefined 2015-03-31 14:20:42

回答

2

最簡單的方法可能是使用庫,它允許對對象的某些更高級別的功能,如filter

此類文庫是例如下劃線和lodash,既保留使用的符號_,與您會寫:

_(objs).filter(function(element){return element.name === matcher})[0]; 

(該濾波器函數將返回的數組的元素或對象,其給定過濾函數返回true - 在這種情況下,你檢查名稱是否等於你的匹配器,返回值是這些元素的數組,因此[0]部分)

編輯:我沒有注意你有一個數組開始,那麼你甚至不需要一個外部庫,defa數組ult在它們上面有過濾方法。

2

最簡單的方法是使用filter功能

var objs = [{id: 1, name: 'foo'}, 
      {id: 2, name: 'bar'}, 
      {id: 3, name: 'baz'}]; 

var matcher = 'bar'; 

var result = objs.filter(function(obj) { 
    return obj.name === matcher; 
}); 

console.log(result); // [{id: 2, name: 'bar'}] 
console.log(result[0]); // {id: 2, name: 'bar'}