@alexnotonfire

Почему ноль не добавился в массив?

Задача - написать функцию, которая возьмет массив с числами и строками и оставит только числа.

Например, [1,'a','b',0,15] => [1,0,15]

Я написал функцию, но почему-то 0 не вернулся в новый массив. В чем дело?

function filter_list(l) {
  return l.filter(function(i){
    if (i !== String(i)) return i;
  })
}

filter_list([1,'a','b',0,15]); // 1, 15
  • Вопрос задан
  • 295 просмотров
Решения вопроса 1
Предикат должен возвращать trueили false. Поскольку вы возвращаете сам элемент, он приводится к логическому типу, соответственно 0 приводится к false.

Лучше делайте так:
function filterList(list) {
  return list.filter(item => typeof item !== 'string')
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Negwereth
@Negwereth
lvivcss.com.ua
0 приводиться к false в данном случае, потому предикат и не возвращает его.

Чем вам typeof не угодил?

UPD:
Твоя задача правильно решается так:

function filterList (list) {
  return list.filter(item => !isNaN(+item));
}

console.log(filterList([1,'a','b',0,15] ))
Ответ написан
KorniloFF
@KorniloFF Куратор тега JavaScript
Работаю по font-end / JS
Если сильно хочется, то можно так:
console.log(filter_list([1,'a','b',0,15]).valueOf());

function filter_list(arr) {
	var out = [];
	arr.forEach(function(i) {
		if(!isNaN(+i)) out.push(+i);
	})
	return out;
}
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы