Как дать имя элементу массива?
Буду крайне благодарен любой помощи. Интегрирую в макет интернет-магазина сортировку дешевле/дороже. Изначально товары лежали в JSON, но для данной задачи были переведены в обычный JS массив. Однако если в JSON у каждого товара имелся артикул:
{
"cedarnut":{ //артикул товара
"name":"Кедровые орехи", //и его свойства
"cost":59,
"desc":"cedarnut description",
"image":"images/cedarnut.webp"
},
..//остальные товары
}
то теперь это просто порядковый номер элемента в массиве:
Вопрос: как дать имя элементу массива?
Это имеет значение в данном проекте так как я использую local storage, где имя добавленного элемента прежде задавалось именно JSON-именем каждого элемента
Ниже приведён сам код. JS массив товаров:
var json = [
{
"name":"Кедровые орехи",
"cost":59
},
{
"name":"Фундук",
"cost":184
},
{
"name":"Пекан",
"cost":123
}
]
Код его сортировки по цене:
json.sort(function(a, b){
return a.cost - b.cost;
});
И код вывода массива на страницу:
let out = '';
// Перебираю все орехи и отрисовываю контейнер каждого
for (var key in json) {
out+='<div class="single-goods">';
out +='<h1>'+json[key]['name']+'</h1>';
out+='<p>Цена: '+json[key]['cost']+'</p>';
out+='<button class="add-to-cart" data-art="'+key+'">Купить</button>';
out +='</div>';
document.getElementById('goods').innerHTML = out; //вывожу орехи на страницу
$('button.add-to-cart').on('click', addToCart); //подключаю к кнопке "Добавить в корзину" функцию
}
}
Прочий код:
function addToCart() {
//добавляем товар в корзину
var articul = $(this).attr('data-art');
if (cart[articul]!=undefined) {
cart[articul]++;
}
else {
cart[articul] = 1;
}
localStorage.setItem('cart', JSON.stringify(cart) );
//console.log(cart);
showMiniCart();
}
function checkCart(){
//проверяю наличие корзины в localStorage;
if ( localStorage.getItem('cart') != null) {
cart = JSON.parse (localStorage.getItem('cart'));
}
}
function showMiniCart(){
//показываю содержимое корзины
var out ='';
for (var w in cart){
out += w + ' --- '+cart[w]+'<br>';
}
out+='<br><a href="cart">Корзина</a>';
$('#mini-cart').html(out);
}
/UPDATE/ Задача была решена посредством внесения следующих правок в код. JS массив:
var json = [
{
"articul":"cedar",
"name":"Кедровые орехи",
"cost":59
},
{
"articul":"hazel",
"name":"Фундук",
"cost":184
},
{
"articul":"pecan",
"name":"Пекан",
"cost":123
}
];
Код вывода массива на страницу:
json.sort((prev, next) => prev.cost - next.cost);
let out = '';
for (var articul in json) {
out+='<div class="single-goods">';
out +='<h1>'+json[articul]['name']+'</h1>';
out+='<p>Цена: '+json[articul]['cost']+'</p>';
/* правка> */ out+='<button class="add-to-cart" data-art="'+json[articul]['articul']+'">Купить</button>'; /* <правка */
out +='</div>';
document.getElementById('goods').innerHTML = out;
$('button.add-to-cart').on('click', addToCart);
}
}
}
Ответы (1 шт):
Добавить артикул к объектам массива и потом использовать его, чтобы вернуться в исходную форму?
var json = [
{
"article": "cedarnut",
"name":"Кедровые орехи",
"cost":59
}
...
]