我有一个对象数组。例如,让我们说这些对象有一个id和一个名字:
var myObjectArray = [{id:1, name:'objOne'}, {id:2, name:'objTwo'}];
我想选择这个数组的一个子集,只包含对象id在一个可接受的id数组中的对象。像这样:
var subsetArray = _.where(myObjectArray , {id:1});
除了obj.id=1
条件,我想说对象ID为IN [3,4,5]
有干净的方法吗? (像lodash,下划线或原始javascript工作)。或者我忘记下划线/ lodash / etc adn只是遍历每个元素?
答案 0 :(得分:4)
你可以使用filter
和indexOf
在香草JS中执行此操作。
var results = myObjectArray.filter(o => ~[3,4,5].indexOf(o.id));
filter
接受一个回调函数,该函数将使用数组中的每个项目进行调用。如果回调返回true,则包含该项,否则包括该项。
indexOf
接受一个值并查找数组中值的从零开始的索引(如果数组中存在该值),否则查找-1
。
~
是一个按位运算符,可将-1
转换为0
(在其他功能中),使-1
成为我们的过滤回调中使用的假值。
在上面的示例中,过滤器以箭头函数的形式接受回调。 =>
的左侧是o
,这是每次迭代时数组的值。在=>
的右边是一个表达式。箭头允许隐式返回表达式值。对于单值箭头函数,Parens也是可选的。
更详细的等价物是:
var results = myObjectArray.filter(function(o){
return [3,4,5].indexOf(o.id) !== -1;
});