Помогите понять как правильно использовать filter внутри switch
Здраствуйте, проблема с построением 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
Ответы (1 шт):
Автор решения: Алексей Шиманский
→ Ссылка
Согласно документации первым параметром у колбэка в filter находится элемент на текущей итерации (текущий обрабатываемый элемент в массиве.). Поэтому
goods[i]
не имеет смысла. Ведь i это не индекс.
Таким образом все goods[i] надо заменить просто на i. А лучше если будет говоряще, т.е.
....filter(element => element....
^^^^^^^ ^^^^^^^
В итоге будет element.badge === "новинка" и т.д.