Фильтровать массив по значению ключа в объекте?
Есть массив:
const arr = [
{a: 'a', b: 'b'},
{a: null, b: 'b'},
{a: 'a', b: null}
];
Как его отфильтровать, чтобы на выходе получился массив только с теми элементами, у которых нет null в значении ключа?
Т.е. применив фильтр, получать [{a: 'a', b: 'b'}]
Ответы (4 шт):
Автор решения: Genesis
→ Ссылка
const arr = [
{ a: "a", b: "b" },
{ a: null, b: "b" },
{ a: "a", b: null }
];
const res = arr.map((obj) => {
for (const key in obj) {
const element = obj[key];
if (obj[key] == null) {
delete obj[key];
}
}
return obj;
});
Автор решения: smellyshovel
→ Ссылка
Возможно, что-то вроде такого. Хотя условие понятно не до конца.
const arr = [
{a: 'a', b: 'b'},
{a: null, b: 'b'},
{a: 'a', b: null}
];
const res = arr.filter((obj) => {
return !Object.keys(obj).some((key) => {
return obj[key] === null;
});
});
console.log(res);
Автор решения: Pilaton
→ Ссылка
const arr = [
{a: 'a', b: 'b'},
{a: null, b: 'b'},
{a: 'a', b: null}
];
const needToExclude = null;
let newArr = arr.filter((obj) => !Object.values(obj).some((el) => el === needToExclude));
console.log('newArr', newArr);
Автор решения: Анастасия Сергеевна
→ Ссылка
Это решение не то, что вам нужно, убирает только свойства со значениями null, а не весь элемент массива
arr.map(item => {
Object.keys(item).forEach(function (key) {
if (item[key] === null) {
delete (item[key])
}
}
)
})
Вам подходит этот вариант
arr.filter((obj) => !Object.values(obj).some(el => el === null))