Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Нужно сделать добавление обьектов в массив (https://javascript.ru/forum/misc/70504-nuzhno-sdelat-dobavlenie-obektov-v-massiv.html)

Romann 10.09.2017 20:25

Нужно сделать добавление обьектов в массив
 
Всем доброго времени суток! :help:
Помогите пожалуйста решить проблему... Думаю она легко решаема, но никак не могу понять как.
Вопрос, как мне сделать так, чтобы когда при проверке срабатывает else
к уже существуещему обьекту в localstorage, добавлялся новый обьект.
На данный момент, он его просто перезаписывает.

Вот код :
var id = "1"; // id товара
	var name = "item 2"; // переменная имени
	var x = 1;
	var summ = 500;

	
	
	
	
	
	
	
	if (getCartData()[id]) { // если товар с таким id уже есть в корзине то  :
	var x = (getCartData()[id][3]) += 1; // узнаем количество товара и добавляем + 1
	var summ = 500; 
		var summa = summ * x; // умножаем количество на сумму.
		var foo = { [id] : [id , name, summa , x]}; //формируем массив
		localStorage.setItem('foo', JSON.stringify(foo));//записываем в localstorage
		alert (" обновляем товар");
	}
	else {
		
		
		
		foo =  {};
		var foo = { [id] : [id , name, summ , x]}; //формируем массив*/
		localStorage.setItem('foo', JSON.stringify(foo));//записываем в localstorage
		alert ("добавляем новый товар");
	}


На выходе, при смене значения id сейчас так :
{"1":["1","item 2",2500,5]}


а нужно чтобы было так :

{"2":["2","item1",100 , 1],"6":["6","item6",5000 , 1]}


Javascript начал познавать несколько дней назад, поэтому прошу не судить строго и отнестись с пониманием...:p Надеюсь правильно описал проблему.

рони 10.09.2017 22:09

Romann,
var id = "1"; // id товара
  var name = "item 2"; // переменная имени
  var x = 1;
  var price = 500;


function Cart(id, name, price, x) {
    var foo = localStorage.getItem("foo");
    foo = foo ? JSON.parse(foo) : {};
    foo.sum = function(id) {
        return id in this ? this[id][2] * this[id][3] : 0
    };
    Object.defineProperty(foo, "sum", {
        enumerable: false
    });
    Object.defineProperty(foo, "total", {
        enumerable: false,
        get: function() {
            return Object.keys(this).reduce(function(s, a) {
                return s + foo.sum(a)
            }, 0)
        }
    });
    if (id != void 0) {
        var item = foo[id];
        var text = "обновляем товар";
        if (!(id in foo)) {
            foo[id] = [id, name, price, 0];
            text = "добавляем новый товар"
        }
        foo[id][3] += x;
        localStorage.setItem("foo", JSON.stringify(foo));
        alert(text)
    }
    return foo
};
var foo = Cart(id,name,price,x);
console.log(foo.sum(1),foo.total)


Часовой пояс GMT +3, время: 05:57.