2014-04-10 38 views
1

我想知道是否有一种简单的方法可以从已过滤的数组中返回ID列表。想要在下划线过滤器后返回ID列表

这里有一个的jsfiddle在那里我过滤数组http://jsfiddle.net/eRzBL/

var array = [{'id':1, 'Color':'blue'}, 
      {'id':2, 'Color':'orange'}, 
      {'id':3, 'Color':'green'}, 
      {'id':4, 'Color':'blue'} ]; 

var myFilter = array.filter(function (item) { 
        return item.Color === 'blue'; 
       }); 

,而不是返回对象的列表,我想回到ID列表。在这种情况下[1,4]。我可以创建一个新的数组,循环访问这个集合并追加这些ID,但是我想知道是否可以使用现有的下划线功能来完成此操作。

回答

2

您可以通过将已过滤的数据传递到map以仅获取ID来扩展该想法。

var result = array.filter(function(item) { 
    return item.Color === 'blue'; 
}).map(function(item) { 
    return item.id; 
}); 

console.log(result) 
# [1, 4] 

如果你想用下划线要做到这一点,

var result = _.chain(array) 
    .filter(function(item) { 
     return item.Color === 'blue'; 
    }) 
    .pluck("id") 
    .value(); 

console.log(result); 
# [1, 4] 

此外,您还可以利用_.where,这样

var result = _.chain(array) 
    .where({Color: 'blue'}) 
    .pluck("id") 
    .value(); 

console.log(result) 
# [1, 4] 

如果你喜欢oneliners,

console.log(_.pluck(_.where(array, {Color: 'blue'}), "id")); 
# [1, 4] 

注意:上述方法都不能击败原生JavaScript的性能

var result = []; 
for (var i = 0; i < array.length; i += 1) { 
    if (array[i].Color === "blue") { 
     result.push(array[i].id); 
    } 
} 
console.log(result); 
# [1, 4]