2015-03-31 43 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'}