jeerjmin
@jeerjmin

Как отфильтровать массив по другому массиву?

Пытаюсь создать фильтрацию массива объектов по свойству-массиву params, который содержит строковые значения.
includes принимает первое строковое значение, а как передать массив?

List =  [
  {
    "id":12,
    "name": "Фламинго",
    "price": 1200,
    "view":[""],
    "params":["птица","окно"]
    },
    {
    "id":13,
    "name": "Семейная",
    "price": 1800,
    "view":[""],
    "params":["камин","качель","окно"]
    },
...
]

const mapStateToProps = state => (
    {
        list:state.list.filter(item => item.params.some(i=> i.includes(["качель","окно"]) )  ),
       
    }
);
  • Вопрос задан
  • 4667 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега React
i.includes(["качель","окно"])

Во-первых, должно быть наоборот, проверяем, что массив содержит строку, а не строка массив:

[ 'качель', 'окно' ].includes(i)

Во-вторых, почему этот массив зашит внутрь функции? Пусть передаётся извне, сделайте его prop'ом компонента - будет доступен через второй параметр mapStateToProps:

const mapStateToProps = ({ list }, { params }) => ({
  list: list.filter(n => n.params.some(m => params.includes(m))),
});

Тогда, передавая различные массивы в компонент, можно будет извлекать различные данные из хранилища.
Ответ написан
Комментировать
rockon404
@rockon404 Куратор тега React
Frontend Developer
state.list.filter(item => item.params.some(i => ["качель","окно"].includes(i)));
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы