使用带有字符串的另一个数组过滤数组

时间:2018-05-16 18:01:44

标签: javascript arrays filter

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

2个像这样设计的阵列

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

我想检查并获取项目,只要array1中的对象id等于array2中的一个id(字符串值)

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

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

但我的情况有点不同,我不知道如何制作返回部分,我怎样才能得到每个数组的索引?

In [10]: p = ['a', 'b', 'c', 'a', 'c', 'a']

In [11]: q  = [1, 2, 1, 3, 3, 1]

In [12]: z = zip(p, q)

In [13]: z
Out[13]: [('a', 1), ('b', 2), ('c', 1), ('a', 3), ('c', 3), ('a', 1)]

In [14]: counts = {}

In [15]: for pair in z:
    ...:     if pair in counts.keys():
    ...:         counts[pair] += 1    
    ...:     else:                    
    ...:         counts[pair] = 1     
    ...:                              

In [16]: counts
Out[16]: {('a', 1): 2, ('a', 3): 1, ('b', 2): 1, ('c', 1): 1, ('c', 3): 1}

In [17]: sub_p = []

In [18]: sub_q = []

In [19]: for i, element in enumerate(p):
    ...:     if element == 'a':
    ...:         sub_p.append(element)
    ...:         sub_q.append(q[i])
In [20]: sub_p
Out[20]: ['a', 'a', 'a']

In [21]: sub_q
Out[21]: [1, 3, 1]

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

&#13;
&#13;
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);
&#13;
&#13;
&#13;

ES6

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