在JS中如何借助另一个数组实现对象数组的过滤?
数组过滤问题解决方案
原有代码问题分析
- 方法1核心问题:
forEach方法本身没有返回值,且你没有在filter的回调函数中返回布尔判断结果,filter无法识别是否要保留当前元素 - 方法2核心问题:用
for...in遍历数组时拿到的j是数组的索引而非元素值,同时同样缺少给filter的返回值
正确实现代码
你偏好使用filter的话,搭配includes方法就能简洁实现需求,逻辑是保留a属性值不在my_array中的对象:
var ob_array = [ {'a' : 1, 'col_2' : 'abc'}, {'a' : 2, 'col_2' : 'xyz'}, {'a' : 3, 'col_2' : 'jkl'} ]; var my_array = [1, 2]; // 过滤逻辑 var filteredArray = ob_array.filter(item => !my_array.includes(item.a));
执行后filteredArray的值就是你预期的结果:
[{'a' : 3, 'col_2' : 'jkl'}]
如果需要兼容不支持includes的旧运行环境,可以用indexOf替代:
var filteredArray = ob_array.filter(function(item) { return my_array.indexOf(item.a) === -1; });
内容的提问来源于stack exchange,提问作者Aztec-3x5
相关产品推荐
相关产品推荐

