Задать вопрос
Morpheus_God
@Morpheus_God

Как правильно вывести содержимое json по ключу?

Доброй ночи. Подскажите пожалуйста, как мне правильно вывести содержимое JSON на основании ключа, который хранится в LocalStorage.
API возвращает мне такого вида JSON
let goods = [
    {
       "id":"1",
       "name":"Pizza",
       "cost":3
    },
    {
       "id":"2",
       "name":"Cola",
       "cost":5
    },
    {
       "id":"3",
       "name":"Tomatoes",
       "cost":6
    }]

В LocalStorage я сохранил id товара и его количество.
{1: 3, 2: 2, 3: 1}
Ключем является id а значение это количество товара.
Написал два метода, один добавляет в LocalStorage id и количество, второй считывает из LocalStorage.
function addToCart(id) {
    if (cart[id]!=undefined) {
        cart[id]++;
    }
    else {
        cart[id] = 1;
    }
    localStorage.setItem('cart', JSON.stringify(cart) );
}

function getCartFromLS() {
    return JSON.parse(localStorage.getItem('cart'));
}

Дальше пробую вытащить по полученому id из LocalStorage информацию по товару
let cart = getCartFromLS();

    for(let key in cart){
        console.log(goods[key].name);
    }

Получаю вывод на консоль.
Cola
Tomatoes
Uncaught TypeError: Cannot read property 'name' of undefined
Выводит только два объекта на третий ругается. И не совпадают по id.
Как правильно сформировать вывод? Что бы выводило по id из LocalStorage?
  • Вопрос задан
  • 376 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
В JS индексы массивов начинаются с нуля, вы пытаетесь обратиться к goods[3], которого не существует.
Ответ написан
@AlexCraft
Software engineer
Попробуйте так:
console.log(
  goods.map((good) => `Товар ${good.id}: ${good.name}, цена: ${good.cost} $`)
)

А ещё можно произвести деструктуризацию объекта и тогда получится вот так:
console.log(
  goods.map(({ id, name, cost }) => `Товар ${id}: ${name}, цена: ${cost} $`)
)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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