【问题标题】:Filtering an array with objects with another array with strings用另一个带字符串的数组过滤带有对象的数组
【发布时间】:2018-05-16 18:01:44
【问题描述】:

我有 2 个数组,我想用另一个数组过滤其中一个数组。

这样设计的2个数组

array1= [{id:23},{id:11},{id:435}]

array2= [23, 435, 5]

只有当 array1 中的对象的 id 等于 array2 中的 id(字符串值)之一时,我才想检查并获取项目

我找到了这样一个简单的解决方案

var filtered=[1,2,3,4].filter(function(e){return this.indexOf(e)<0;},[2,4]);

但我的情况有点不同,我不知道如何制作返回部分,如何获取每个数组的索引?

var filtered=array1.filter(function(e){return e.id === ??},array2);

【问题讨论】:

  • 请添加想要的结果。为什么需要使用this
  • This answer 解释了过滤。寻找more complex comparer

标签: javascript arrays filter


【解决方案1】:

您可以使用id 属性查找索引。

var array1 = [{ id: 23 }, { id: 11 }, { id: 435 }],
    array2 = [23, 435, 5],
    filtered = array1.filter(function (o) {
        return array2.indexOf(o.id) > -1;
    });
    
console.log(filtered);

ES6

var array1 = [{ id: 23 }, { id: 11 }, { id: 435 }],
    array2 = [23, 435, 5],
    filtered = array1.filter(({ id }) => array2.includes(id));
    
console.log(filtered);

【讨论】:

  • 谢谢,但它只在我制作它时才起作用 > -1 而不是
【解决方案2】:

您可以使用.filter 并从本质上检查对象id 是否存在于array2 中。有几种方法可以做到这一点,包括.find.findIndex。如果找到一个匹配项,我会使用.some,它返回true

array1.filter(obj => array2.some(id => id === obj.id));

【讨论】:

    猜你喜欢
    • 2020-08-04
    • 1970-01-01
    • 2018-10-03
    • 1970-01-01
    • 2021-05-14
    • 1970-01-01
    • 2019-04-04
    相关资源
    最近更新 更多