Javascript .push导致数组嵌套越来越深

时间:2019-04-22 14:19:42

标签: javascript arrays multidimensional-array

我确定这很简单,但是到目前为止我的搜索还没有帮助。

当我将一个数组推入另一个数组时,它们嵌套的层次更深。第一个数组位于正确的深度。

var productArray = [{productID: currentProduct, productPrice: currentPrice, productName: productName, options: myOptions}];

if(localStorage.getItem("cart")){
    var existingArray = JSON.parse(localStorage.getItem("cart"));
    existingArray.push(productArray);
    localStorage.setItem("cart", JSON.stringify(existingArray));
} else {
    localStorage.setItem("cart", JSON.stringify(productArray));
}

结果:

0: Object { productID: "1", productPrice: "2.00", productName: "Chicken Sandwich", … }
​
1: 0: Object { productID: "1", productPrice: "2.00", productName: "Chicken Sandwich", … }
​
2: 0: Object { productID: "1", productPrice: "2.00", productName: "Chicken Sandwich", … }

3 个答案:

答案 0 :(得分:0)

您有多个选项来连接两个数组,但不是b"\x00\x00\x08`\x00\x00\vÝ\x00\x00\x13±\x00\x00#\x0E\x00\x00-’\x00\x00FÊ\x00\x00H\x1F\x00\x00^\x06\x00\x00bF\x00\x00h²"(除非您迭代第二个数组并分别推送每个元素,否则用.push跟进)

.flat()

答案 1 :(得分:0)

由于 productArray 是一个数组,而不是一个对象,将其推入另一个数组将创建另一个数组,该数组将包含初始数组和新数组一个。

要执行预期的操作,应声明一个新对象,然后将 it 推入现有数组。

var productObject = {productID: 1, productPrice: 1, productName: '', options:{}};
var productArray = [];
if(localStorage.getItem("cart")){
    var existingArray = JSON.parse(localStorage.getItem("cart"));
    existingArray.push(productObject );
    localStorage.setItem("cart", JSON.stringify(existingArray));
} else {
    productArray.push(productObject);
    localStorage.setItem("cart", JSON.stringify(productArray));
}

答案 2 :(得分:0)

我认为您正在将整个“ productArray”添加到“ existingArray”的位置n中。尝试做这个。

var productArray = [{productID: currentProduct, productPrice: currentPrice, productName: productName, options: myOptions}];

if(localStorage.getItem("cart")){
    var existingArray = JSON.parse(localStorage.getItem("cart"));
    productArray.forEach(function(val){
     existingArray.push(val);
    })
    localStorage.setItem("cart", JSON.stringify(existingArray));
} else {
    localStorage.setItem("cart", JSON.stringify(productArray));
}