#javascript
#javascript
Вопрос:
У меня есть массив объектов, которые я хочу отфильтровать, чтобы в нем отображались только объекты с идентификатором, по крайней мере, с «чем-то», что не является пустым в нем, кроме идентификатора. итак, этот массив ниже
[{id:1, a:true, b:[]},
{id:2, a:false, b:[]},
{id:3, foo:'', bar:{}},
{id:4, bla:[1,2,3], blabla:{x: 1}}];
показать дает мне следующий результат:
[{id:1, a:true, b:[]},
{id:4, bla:[1,2,3], blabla:{x: 1}}];
Вот где я нахожусь, однако я знаю, что этот способ не идеален, даже если он дает мне вышеуказанный результат :
const dataArray = [
{id:1, a:true, b:[]},
{id:2, a:false, b:[]},
{id:3, foo:'', bar:{}},
{id:4, bla:[1,2,3], blabla:{x: 1}}
];
const filterArray = dataArray.filter((value) => {
return value.foo != '' amp;amp; value.a != false
})
console.log(filterArray);
Комментарии:
1. Я не понимаю, для чего вы пытаетесь фильтровать. Только объекты, для которых задан идентификатор, и хотя бы одно другое свойство, которое не определено?
2. Пожалуйста, более четко определите «что -то», что не является пустым . Каков ожидаемый результат и почему?
Ответ №1:
Вы можете проверять объекты с помощью ключей.
const
array = [{ id: 1, a: true, b: [] }, { id: 2, a: false, b: [] }, { id: 3, foo: '', bar: {} }, { id: 4, bla: [1, 2, 3], blabla: { x: 1 } }],
result = array.filter(({ id, ...o }) => Object.values(o).some(v => v amp;amp; typeof v === 'object'
? Object.keys(v).length
: v
));
console.log(result);
Комментарии:
1. Спасибо за это, это то, чего я пытался достичь!
Ответ №2:
Если я правильно понимаю вашу цель, это может быть способом работы с неверными свойствами, отличными от id
const dataArray = [
{ id: 1, a: true, b: [] },
{ id: 2, a: false, b: [] },
{ id: 3, foo: "", bar: {} },
{ id: 4, bla: [1, 2, 3], blabla: { x: 1 } },
{ id: 5 }, // should not be in filterArray
{ id: 6, a: false } // should not be filterArray
];
// with Object.keys
const filterArray = dataArray.filter(({ id, ...data }) =>
Object.keys(data).some((key) => data[key])
);
// with Object.entries
const filterArray2 = dataArray.filter(({ id, ...data }) =>
Object.entries(data).some(([, prop]) => prop)
);
console.log(filterArray);
console.log(filterArray2);
Комментарии:
1. извините, если раньше это было непонятно, но вы в основном поняли это спасибо за ответ, который помог мне найти решение,