对象数组-选择数组子集,其中对象属性为值数组
Array of Objects - Select Subset of Array Where Obj.Prop IN Array of Values
我有一个对象数组。举个例子,假设这些对象有一个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,只遍历每个元素?
您可以在带有filter
和indexOf
的普通JS中执行此操作。
var results = myObjectArray.filter(o => ~[3,4,5].indexOf(o.id));
filter
接受一个回调,该回调将对数组中的每个项进行调用。如果回调返回true,则包含该项,否则不包含。
indexOf
接受一个值,如果该值存在于数组中,则在数组中查找该值的从零开始的索引;否则,则为-1
。
~
是一个按位运算符,它将-1
转换为0
(以及它所做的其他事情),使-1
成为在我们的筛选器回调中使用的错误值。
在上面的例子中,filter接受了一个箭头函数形式的回调。=>
的左边是o
,它是每次迭代时数组中的值。=>
右边是一个表达式。箭头允许隐式返回表达式值。Parens对于单值箭头函数也是可选的。
一个更详细的等价物是:
var results = myObjectArray.filter(function(o){
return [3,4,5].indexOf(o.id) !== -1;
});
相关文章:
- 将数组对象传递到struts2中的操作类
- 如何使用jquery返回php-json数组对象
- 从其名称获取javascript数组对象
- 值未与数组对象绑定
- 如何按数组/对象值的倍数过滤对象数组
- 在表中显示数组对象
- 在数组对象中分组
- 将第二个或多个数组推送到数组对象 AngularJS 中
- 重新排列 JavaScript 数组/对象
- 键上的javascript数组对象过滤器
- handontable:在不更改数据数组/对象的情况下隐藏某些列
- 用于跟踪购物车可用性的Javascript数组/对象/哈希表
- 重建有角度的java脚本数组对象
- 对JSON数组对象进行排序
- 连接与数组对象相关的文本:方式和位置
- 哪些浏览器和版本支持将常见的类数组对象直接传递到fn.apply()
- 如何使用Handlebars循环数组对象和模板
- 是否可以引用JS数组/对象中的另一个元素
- Javascript中的名称索引-数组/对象
- 数组长度不等于数组对象