2017-01-08 7 views
0

Допустим, у меня есть один массив с подмассивами и другой массив так:Как проверить все итерационные условия (Javascript)

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

'hasOwnproperty' не делать то, что вы думаете это – Bergi

ответ

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);

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);

Wow есть очень похожий ответ .. Тогда давайте сделаем это с .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);

+1

Думаю, вам нужно поменять 'arr2'' 'sa' на соответствие t он описывает "* подмассивы, содержащие каждый элемент' arr2' * ". – Bergi

+0

@Bergi :) Извините за то, что вы не обычные ... Это мое пятое пиво, так что я потягиваю. Может быть, поэтому я не могу сказать разницы. Не поймите меня неправильно, я люблю вас, поправляя меня. Не могли бы вы рассказать, какая разница ...? – Redu

+1

С 'a = [1,2]' an 'b = [1]' все элементы 'b' содержатся в' a', но 'b' не содержит всех элементов' a'. – Bergi

Смежные вопросы