2015-04-29 2 views
1

Я пытаюсь построить массив зацикливания над другим массивом, который более или менее выглядит как этогопостроить новый массив из массива путем фильтрации нулевых элементов

var x = [1, null, 324, 110, null] 

Я пытаюсь перебрать это и проверить, если элемент в индексе i не равен нулю, тогда он переходит в новый массив

var numberCollection = []; 

for(var i = 0; i < x.length; i++){ 
    numberCollection[i] = (!!x[i]) ? x[i]; 
} 

console.log(numberCollection) 

, который определенно не работает. Что мне не хватает? Я видел несколько примеров удаления недопустимого элемента из массива, но это выходит за рамки в этом контексте

ответ

4

попробовать что-то вроде этого,

for(var i = 0; i < x.length; i++){ 
    if (x[i] !== null){ 
     numberCollection.push(x[i]); 
    } 
} 
+0

избили меня на 34 секунды. – FreeSandwiches

+0

@ScottCorbett - этот один работает .. ваш работа тоже. Я вижу, где моя ошибка. Спасибо за указание в правильном направлении :-) – soum

+0

Просто любопытно, почему '! ==' вместо просто '! ='? Сравнение типов кажется ненужным в этом случае ... –

0

Давайте назовем первый массив (тот, который имеет значение NULL) A [] и второй B []. нам также понадобится int count.

for(var i=0; i<A.length; i++){ 
    if(A[i] != NULL){ 
     B[count] = A[i]; 
     count++; 
    } 
} 

, который должен это сделать.

0

Другие ответы работают ... просто чтобы дать вам еще один вариант, вы можете использовать новый filter() метод введен в ECMAScript 5:

var numberCollection = x.filter(function(item) { 
    return !!item; 
}); 

Обратите внимание, что для этого, чтобы работать в IE8 и ниже вы будете необходимо обеспечить прокладку для метода filter(); есть один здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter#Polyfill.

0

Следующие, казалось, работали нормально.

var x = [1, null, 324, 110, null]; 
var numberCollection = []; 

var k = 0; 
for(i = 0; i < x.length; i++) { 
    if (x[i] === null) { 
     continue; 
    } else { 
     numberCollection[k++] = x[i]; 
    } 
} 

console.log(numberCollection); 
+1

Использование метода 'push()', как в ответе @ user86745458, намного проще ... –

+0

Yup. Это действительно проще, чем то, что я сделал. –

0

Это должно сработать.

var numberCollection = []; 
for(var i = 0, j = x.length; i < j; i++){ 
    if (x[i] !== null) {numberCollection.push(x[i])} 
}