webinar
@webinar
Учим yii: https://youtu.be/-WRMlGHLgRg

Как в js правильно сделать объект для корзины?

Корзина храниться в localStorage, а следовательно в виде json. Какая структура будет более правильной, что бы оперировать удобно данными.
Вначале была идея:
product_1: {count:1, title: 'title'},
product_2: {count:1, title: 'title'},
articul_1: {count:1, title: 'title'},

продукт и артикул разные сущности, так надо не вникайте, не важно, важно что сущностей несколько и у них есть id, уникальные для каждой сущности.
Тут просто определять, есть ли уже такая сущность в корзине и т.д. Но как я обнаружил, js в json это упорно загонять не хочет.
JSON.stringify(cart); //дает пустой массив
И вот вопрос: дайте пожалуйста метод загнать это в json или тыкните носом в другой метод.
Вариант с
0: {item: 'product_1', count:1, title: 'title'},
1: {item: 'product_2', count:1, title: 'title'},
2: {item: 'atricul_1', count:1, title: 'title'},

не будет иметь проблем в json, но как без мук определять наличие и ключ элемента, например имеем "product_1" и надо в этом массиве найти нет ли элемента с этим item. Я вижу только перебор, но должен же быть более адекватный способ.
Заклинило, уже 2 часа хожу кругами с бубном. Видимо php мешает думать про js.
  • Вопрос задан
  • 1241 просмотр
Решения вопроса 2
therealmoronto
@therealmoronto
Middle full stack developer :)
Ты прав, перебор в помощь. Вообще в плане клиентской части переборы не так страшны, браузер запускает кучу потоков для вычислений своих и делает любой перебор достаточно быстро. Другое дело сохранять и вытаскивать все это добро из локального хранилища. Тут больше времени будет уходить, чем на поиск значений.
Ответ написан
Krasnodar_etc
@Krasnodar_etc
fundraiseup
Второй вариант, а при добавлении в корзину проверять наличие данного товара в ней:
var already = false;

cart.forEach(product=>{
    if (product.item == 'product_1' ) {
        already = true;
        // такой продукт уже в корзине
    }

    if (already) {
        ....
    } else {
       ....
    }
})
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
nepritimov_m
@nepritimov_m
Frontend dev.
Посмотри в сторону библиотеки Immutable.js.
Извлекать, добавлять и проверять наличие данных в иммутабельном объекте - сплошное удовольствие.
P.S.: конвертация в JSON присутствует. Документация у библиотеки шикарная.
Ответ написан
Ваш ответ на вопрос

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

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