代码之家  ›  专栏  ›  技术社区  ›  Rasim Avcı

使用具有字符串的另一个数组过滤具有对象的数组

  •  1
  • Rasim Avcı  · 技术社区  · 6 年前

    我有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);
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Nina Scholz    6 年前

    您可以使用 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);
        2
  •  0
  •   Explosion Pills    6 年前

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

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