让我们说我有一个包含子阵列的数组和另一个像这样的数组:
var arr1 = [[1,2], [3,4], [5,6]];
var arr2 = [3,4];
我想打印arr1
中包含arr2
每个元素的所有子数组。但由于这只是我想要的一个例子,我还希望能够将它应用于任何类似于这样的数组。
如何创建一个for循环,可以测试每个arr1[i]
是否包含arr2
的所有元素?到目前为止,我有这段代码,但它只检查是否单个元素匹配每个子数组中的元素。我一直在努力寻找改变方法以实现我需要的功能,但我在解决方案上留下了空白。
var newArr = [];
for (var j = 0; j < arr1.length; j++) {
if (arr1[i].hasOwnProperty(arr2[j])) {
newArr.splice(-1, 0, arr1[i]);
}
}
return newArr;
答案 0 :(得分:3)
使用Array#filter
来迭代arr1
,如果他们没有通过Array#every
测试,请移除子数组 - 检查arr2
中的每个项目是否在子阵列使用Array#indexOf
(如果支持,则为Array#includes
。)
var arr1 = [[1,2], [3,4], [5,6], [1, 3, 6, 4]];
var arr2 = [3,4];
var result = arr1.filter(function(sub) {
return arr2.every(function(n) {
return sub.indexOf(n) !== -1; // or sub.includes(n)
});
});
console.log(result);
&#13;
答案 1 :(得分:0)
我会这样做;
var arr1 = [[1,2], [3,4], [5,6]],
arr2 = [3,4];
res = arr1.filter(sa => sa.every(n => arr2.includes(n)));
console.log(res);
哇有一个非常相似的答案..然后让我们用.reduce()
var arr1 = [[1,2], [3,4], [5,6]],
arr2 = [3,4,5,6];
res = arr1.reduce((r,s) => s.every(n => arr2.includes(n)) ? r.concat(s):r,[]);
console.log(res);