У меня есть функция, которая выталкивает значения в массив (очень упрощенный пример ниже):Проверьте, сколько раз появляется неопределенное значение массива в этом массиве
numOfArr = 3; //is dynamically retrieved. can be 1-500);
arr1 = [212,214,215,218]
arr2 = [212,259,214,292,218]
arr3 = [272,214,218,292]
Я бегу цикл по каждому из «обр «массивы, чтобы подтолкнуть их значения к« myArr »(который отлично работает) и использовать это, чтобы получить значения, которые находятся в« arr1 »и« arr2 »через« arr500 »и т. д. Я пытался сделать это, чтобы перебирать myArr, создать временную копию массива и использовать .indexOf для проверки других значений перед их удалением, но я знаю, что я делаю ошибку где-то, что не могу найти.
for(var i = 0; i < myArr.length; i++){
tempArr = myArr;
for(var j = 0; j < numOfArr; j++){
var spl = tempArr.indexOf(myArr[i]);
if(spl == -1 && myArr.indexOf(myArr[i]) !== -1){
myArr.splice(i,1);
} else {
tempArr.splice(i,1);
}
}
}
В идеале, то, что я хочу, это «myArr», чтобы в итоге получить значения, которые находятся во всех 3-х массивах (214 и 218). Является ли проблема в том, где я удаляю splice на myArr, потому что цикл все еще проходит через все?
Update:
Используя пример здесь: Simplest code for array intersection in javascript
function intersect_safe(a, b)
{
var ai=0, bi=0;
var result = new Array();
while(ai < a.length && bi < b.length)
{
if (a[ai] < b[bi]){ ai++; }
else if (a[ai] > b[bi]){ bi++; }
else /* they're equal */
{
result.push(a[ai]);
ai++;
bi++;
}
}
return result;
}
я попытался реализовать в своем коде, как мне нужно.
var allItems = [];
var items = [1,2,3,4,5,6,7]
allItems.push(items);
allItems.push([1,2,4,9,100,1000])
allItems.push([1,2,3,4,5,9,100])
for(var i=0; i < allItems.length; i++){
//iterate through item
console.log("items "+ items);
console.log("allItems id: "+allItems[i]);
items = intersect_safe(items,allItems[i]);
console.log("items: "+items);
}
Если я использую функцию от фактических значений, которые находятся в каждом индексе массива, я вижу правильное пересечение возвращается, так что у меня есть только «1,2,4» в качестве значений в финале " элементов ". В этом цикле функция, кажется, возвращает исходное значение каждый раз. Извиняюсь за отсутствие чего-то вопиющего ... Я просто не могу найти разрыв в логике, если каждый индекс в массиве содержит сам массив, в который я могу углубиться.
'concat' возвращает новый массив, поэтому' myArr' не получает новые предметы, если это то, что вы имели в виду сделать. – elclanrs
ах хорошо .. ну, что я на самом деле сделал, это использовать .push в цикле for на каждом из массивов. Я просто попытался сделать это простым в этом примере. Извините, я изменю его. –