如何测试所有迭代条件是否正确(Javascript)

时间:2017-01-08 19:49:58

标签: javascript arrays iteration

让我们说我有一个包含子阵列的数组和另一个像这样的数组:

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;

2 个答案:

答案 0 :(得分:3)

使用Array#filter来迭代arr1,如果他们没有通过Array#every测试,请移除子数组 - 检查arr2中的每个项目是否在子阵列使用Array#indexOf(如果支持,则为Array#includes。)

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