Фильтрация нескольких опций из массива по значениям другого массива

Рейтинг: 1Ответов: 1Опубликовано: 10.03.2023

Как отфильтровать сразу по всем цветам 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Принят

Например вот так можно отфильтровать массив по значениям другого массива:

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