|
Перебор массива - вложенный цикл
Не могу понять где ошибки.
Задача: необходимо написать функцию, которая проверяла - содержаться ли элементы массива array 2 в массиве array 1 и в зависимости от этого возвращала булевое значение. Решение (неработающее): Создаю два цикла: -внешний цикл перебирает значения array1 и присваивает их var arrayElem, которая передаётся во внутренний цикл; -во внутреннем цикле перебираются значения array2 и сравниваются с var arrayElem; -если значения равны то array2[j] помещаеться в пустой массив matchArray; -если длина массива matchArray === длине массива array2 возвращаеться true, иначе false. Код:
function contains(array1, array2) { |
Цитата:
var a1=[1,2,3,4,5]; var a2=[2,4]; alert(cross(a1,a2)); function cross(Ar1,Ar2) { for (var i=0; i<Ar1.length; i++) { for (var j=0; j<Ar2.length; j++) { if (Ar1[i]==Ar2[j]) { return true; }; }; }; return false; }; |
ksa, то есть при первом же совпадении считаем остальные элементы тоже совпавшими? Странная логика..
|
Используя ES5 функционал:
var a1 = [1,2,3,4,5]; var a2 = [2,4]; alert(isSubset(a1, a2)); function isSubset(a1, a2) { return a2.every(function(element) { return a1.indexOf(element) !== -1; }); }; |
Цитата:
|
Цитата:
Если второй массив должен быть частью первого - тогда все сложнее. Ведь может получиться и такая комбинация var a1=[1,2,3,4,5]; var a2=[2,4,4,2]; И как тогда? |
Цитата:
function contains(array1, array2) { "use strict"; array1 = [1, 2, 3, 4, 5]; what = [1, 2, 3]; var matchArray = []; var counter = 0; for (var i = 0; i < array1.length; i++) { var arrayElem = array1[i]; for (var j = 0; j < what.length; i++) { if (what[j] === arrayElem) { counter = counter + 1; } } } if (counter === what.length) { return true; } else { return false; } } К сожалению, мне как начинающему не совсем понятен Ваш код. Забыл сказать: я не могу в коде использовать те элементы JS, которые мы ещё не изучали а до indexOf еще не добежали. |
Цитата:
var a1=[1,2,3,4,5]; var a2=[2,4,4,2]; alert(isSubset(a1, a2)); function isSubset(a1, a2) { for (var i = 0; i < a2.length; i++) { var element = a2[i]; var found = false; for (var j = 0; j < a1.length; j++) { if (a1[j] === element) { found = true; break; } } if (!found) { return false; } } return true; } |
Цитата:
|
Цитата:
Я не зря назвал функцию isSubset. В множествах нет повторяющихся элементов, поэтому [2, 4, 4, 2] - тоже самое что и [2, 4], и в множествах порядок не имеет значения. Именно так функция и работает - игнорирует порядок и повторы. |
Часовой пояс GMT +3, время: 15:58. |
|