Отобрать элементы в массиве по набору значений из другого массива Javascript
Есть основной массив и массив условие:
const objects = [
{ id: "55", naim: "Объект 1", iduser: "17" },
{ id: "56", naim: "Объект 2", iduser: "22" },
{ id: "57", naim: "Объект 3", iduser: "22" },
{ id: "58", naim: "Объект 4", iduser: "17" },
];
const spisok = ["55","57"];
Нужно получить фильтр из основного массива по условию из spisok, связывая по полю id, такого содержания:
[
{ id: "55", naim: "Объект 1", iduser: "17" },
{ id: "57", naim: "Объект 3", iduser: "22" },
]
Пытался родить что-то типа:
const result = spisok.map((u) =>
objects.filter((a) =>
(a.id == u)
)
);
Но так получается один лишний уровень.
ЗЫ И еще вопрос: если массив-условие будет объект такого типа:
const spisok = {id: ["55","57"], iduser: ["17"] };
Чтобы отобрало все объекты где id (55, 57) и iduser (17). Результат будет только:
{ id: "55", naim: "Объект 1", iduser: "17" }.
Ответы (1 шт):
Автор решения: Igor
→ Ссылка
const objects = [
{ id: "55", naim: "Объект 1", iduser: "17" },
{ id: "56", naim: "Объект 2", iduser: "22" },
{ id: "57", naim: "Объект 3", iduser: "22" },
{ id: "58", naim: "Объект 4", iduser: "17" },
];
const spisok = ["55","57"];
const result = objects.filter(i => spisok.includes(i.id));
console.log(result);
const objects = [
{ id: "55", naim: "Объект 1", iduser: "17" },
{ id: "56", naim: "Объект 2", iduser: "22" },
{ id: "57", naim: "Объект 3", iduser: "22" },
{ id: "58", naim: "Объект 4", iduser: "17" },
];
const spisok = {
id: ["55","57"],
iduser: ["17"]
};
const result = objects.filter(i => {
const entries = Object.entries(spisok);
return entries.filter(e => e[1].includes(i[e[0]])).length == entries.length;
});
console.log(result);