我有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]
答案 0 :(得分:0)
您可以使用.filter
并基本检查id
中是否存在对象array2
。有几种方法可以做到这一点,包括.find
和.findIndex
。如果找到一个匹配项,我会使用.some
返回true
。
array1.filter(obj => array2.some(id => id === obj.id));
答案 1 :(得分:0)
您可以使用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);
&#13;
ES6
var array1 = [{ id: 23 }, { id: 11 }, { id: 435 }],
array2 = [23, 435, 5],
filtered = array1.filter(({ id }) => array2.includes(id));
console.log(filtered);
&#13;