我有一个对象数组。例如,假设这些对象有一个 id 和一个名称:
var myObjectArray = [{id:1, name:'objOne'}, {id:2, name:'objTwo'}];
Run Code Online (Sandbox Code Playgroud)
我想选择这个数组的一个子集,只包含对象 id 在可接受的 id 数组中的对象。所以像这样:
var subsetArray = _.where(myObjectArray , {id:1});
Run Code Online (Sandbox Code Playgroud)
除了obj.id=1条件之外,我想说对象 ID 是 IN[3,4,5]
有没有干净的方法来做到这一点?(任何像 lodash、下划线或原始 javascript 工作)。或者我忘记了下划线/lodash/etc 只是遍历每个元素?
您可以在 vanilla JS 中使用filter和来做到这一点indexOf。
var results = myObjectArray.filter(o => ~[3,4,5].indexOf(o.id));
Run Code Online (Sandbox Code Playgroud)
filter接受一个回调,它被数组中的每个项目调用。如果回调返回 true,则它包含该项目,否则不包含该项目。
indexOf接受一个值并在数组中查找该值的从零开始的索引(如果该值存在于数组中,-1否则)。
~是位运算符,轮流-1到0(中它做其他的事情),使得-1在我们的过滤器回调使用falsy值。
在上面的例子中,过滤器以箭头函数的形式接受回调。在=>is的左边o,它是每次迭代时数组中的值。的右边=>是一个表达式。箭头允许隐式返回表达式值。对于单值箭头函数,括号也是可选的。
更详细的等价物是:
var results = myObjectArray.filter(function(o){
return [3,4,5].indexOf(o.id) !== -1;
});
Run Code Online (Sandbox Code Playgroud)