2016-03-24 3 views
-1

У меня есть массив чисел с нулями. Я хочу получить количество ненулевых элементов. Мой код:Странное поведение при проверке нулей в массиве javascript

var arrayWithNulls = [null, 8, 3, null, 5, 0, 9]; 

var cleanArray = []; 

for(i = 0; i < arrayWithNulls.length; i++){ 
    if(arrayWithNulls[i]) 
     cleanArray.push(arrayWithNulls[i]); 
} 

console.log(cleanArray.length); 

Но я получаю 4 вместо 5 в качестве результата. Что мне не хватает?

+4

0 означают ложные ... –

+2

'если (arrayWithNulls [я]! == NULL)' –

+0

Таким образом, проблема заключается в 0 и может означать число и ложь в JS, легко miss –

ответ

3

У вас такое поведение, так как 0 - значение фальшиво.

Вы можете изменить код на следующее, если они включают в себя только цифры:

var arrayWithNulls = [null, 8, 3, null, 5, 0, 9]; 
 

 
var cleanArray = []; 
 
for(i = 0; i < arrayWithNulls.length; i++){ 
 
    if(typeof arrayWithNulls[i] === 'number') 
 
     cleanArray.push(arrayWithNulls[i]); 
 
} 
 
document.write(cleanArray.length);

Это те falsy значения в JS для справки: false, null, undefined, '', 0, NaN

+0

Спасибо, лучше проверить, есть ли номер –

+0

, который будет исключать объекты и строки и другие вещи тоже –

+0

@ DanielA.White Да, это было утверждение в вопросе OP. Это массив чисел. –

2

Для всего подсчитывая, я предлагаю использовать Array#reduce() и числовую переменную для результата вместо массива и неправильное использование длины.

var arrayWithNulls = [null, 8, 3, null, 5, 0, 9], 
 
    nullCount = arrayWithNulls.reduce(function (r, a) { 
 
     return r + +(a === null); 
 
    }, 0); 
 

 
document.write(nullCount);

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