Помогите понять как правильно использовать filter внутри switch

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

Здраствуйте, проблема с построением filter внутри switch , есть массив с объектами, мне нужно выстроить фильтрацию товаров , вот мой код, но он не рабочий

switch (target.id) {
    case 'all':
        show  = [...goods];
        break;
    case 'new':
        show  = goods.filter(i => goods[i].badge === "новинка")
        break;
    case 'sale':
        show  = goods.filter(i => goods[i].badge === "скидка")
        break;
    case 'low-price':
        show  = goods.filter(i => goods[i].price.current <= 1000)
        break;
    case 'high-price':
        show  = goods.filter(i => goods[i].price.current >= 1000)
        break;
    }

Прикрепляю кусочек массива чтоб было понятнее

let goods = [
{
    "id": 14,
    "href": "https:...",
    "name": "...",
    "img": [
        {
            "preview": "https:..."
        }
    ],
    "price": {
        "old": 806,
        "current": 549,
    },
    "badge": "новинка"
},

внутри show скопирован массив goods который я потом вывожу вместо goods

Ответы

▲ 3

Согласно документации первым параметром у колбэка в filter находится элемент на текущей итерации (текущий обрабатываемый элемент в массиве.). Поэтому

goods[i]

не имеет смысла. Ведь i это не индекс.

Таким образом все goods[i] надо заменить просто на i. А лучше если будет говоряще, т.е.

....filter(element => element....
           ^^^^^^^    ^^^^^^^

В итоге будет element.badge === "новинка" и т.д.