Дан массив [1, 'abc', [], [a], {}, {name: "ololo"}, null, 0]
Напишите функцию которая вернет новый массив без пустых значений (пустой массив и пустой объект - тоже расцениваются как пустые значения). Не могу понять как убрать пустой массив и пустой объект.
let arr = [1, 'abc', [], ['a'], {}, {name: "ololo"}, null, 0];
arr = arr.filter(function(e){ return e === 0 || e });
console.log(arr);
Ответы (3 шт):
Держи )
let arr = [1, 'abc', [], ['a'], {}, {name: "ololo"}, null, 0];
arr = arr.filter(function(e){ return e != '' && e != null && (typeof(e) == 'object' ? Object.keys(e).length != 0 : e)});
console.log(arr)
let arr = [1, 'abc', [], ['a'], {}, {name: "ololo"}, null, 0];
arr = arr.filter((e)=>(e === 0 || e && (e !== '') && (typeof(e) === 'object' ? Object.keys(e).length !== 0 : e)));
console.log(arr);
Как отфильтровать массив?
Использовать метод filter.
[1,2,3,4,5,6,7,8,9].filter(q => q > 5)
Но если массив состоит не только из цифр.
Но если нужно сделать много проверок на различные условия.
То в этом случае - задача сильно усложнится и станет всё запутанным.
Но это на первый взгляд, задачу можно сильно упростить, если завести массив проверочных функций. А если их объявление делать внутри объекта - так вообще всё будет: и просто, и код аккуратен и структурирован.
Смотри мой пример ниже.
Как проверить каждый элемент массива на большое количество условий?
тут запустить:
const type = q => Object.prototype.toString.call(q);
const is = {
String: q => '[object String]' === type(q),
Object: q => '[object Object]' === type(q),
Array: q => '[object Array]' === type(q),
Number: q => '[object Number]' === type(q),
};
const _is = {
Zero: q => 0 === q,
Null: q => null === q,
Undefined: q => undefined === q,
ZeroString: q => is.String(q) && 0 === q.length,
ZeroList: q => is.Array(q) && 0 === q.length,
ZeroNamedList: q => is.Object(q) && 0 === Object.keys(q).length,
};
const _isList = Object.values(_is);
const filter = q => !_isList.some(f => f(q));
let arr = [1, 'abc', [], ['a'], {}, { name: "ololo" }, null, 0];
arr = arr.filter(filter);
console.log(arr);
тут доки:
- https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
- https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/some
- https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/values
- https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag
небольшое замечание к коду:
const obj = {
q: undefined
}
console.log(
Object.keys(obj)
) // ["q"]
Ах, ДА! Не забываем что ещё есть такая штука как empty - Есть ли бóльшая пустота чем undefined?