Фильтрация нескольких опций из массива по значениям другого массива
Как отфильтровать сразу по всем цветам skinColor?
skinColorValue: {
skinColor: string,
id: number
} = [{skinColor:"blue",id: 1}, {skinColor:"green", id:21}, {skinColor:"fair",id: 554}]
persons = [{
gender: "male"
height: 172
id: "cGVvcGxlOjE="
mass: 77
name: "Luke Skywalker"
skinColor: "fair"
}, {
gender: "n/a"
height: 167
id: "cGVvcGxlOjI="
mass: 75
name: "C-3PO"
skinColor: "gold"
}, {
gender: "male"
height: 202
id: "cGVvcGxlOjQ="
mass: 136
name: "Darth Vader"
skinColor: "white"
}
persons = persons.filter((el) => {
return (
el.skinColor === this.skinColorValue[0].skinColor ||
el.skinColor === this.skinColorValue[1].skinColor ||
el.skinColor === this.skinColorValue[2].skinColor
);
});
Выполняется только с тремя фильтрами, а их может быть 1 или 2
Ответы (1 шт):
Автор решения: SwaD
→ Ссылка
Например вот так можно отфильтровать массив по значениям другого массива:
const skinColorValue = [{skinColor: "blue", id: 1}, {skinColor: "green", id: 21}, {skinColor: "fair", id: 554}]
const persons = [{
gender: "male",
height: 172,
id: "cGVvcGxlOjE=",
mass: 77,
name: "Luke Skywalker",
skinColor: "fair",
}, {
gender: "n/a",
height: 167,
id: "cGVvcGxlOjI=",
mass: 75,
name: "C-3PO",
skinColor: "gold",
}, {
gender: "male",
height: 202,
id: "cGVvcGxlOjQ=",
mass: 136,
name: "Darth Vader",
skinColor: "white",
}]
const filterPerson = persons.filter((el) => {
return skinColorValue.some((it) => it.skinColor === el.skinColor);
})
console.log(filterPerson);
Метод .some() проверят, удовлетворяет ли хоть один элемент заднному условию. Как только такой элемент находится, перебор останавливается и возвращается true, в противном случае возвращается false