为什么我的push函数以嵌套方式存储数据?

时间:2019-07-18 17:18:42

标签: javascript arrays json object local-storage

我正在更新我的 localStorage ,以在客户端用户进行每次交易后存储特定数据。我注意到我的代码将数据保存为嵌套格式。这是不可取的。

如果数据以非嵌套格式存储,则将是理想的。

查找附带的描述性图像,以使您更清楚地了解我的意思。

An image of the data saved in array format

An image the nested arrays

如何编制代码以 NON 嵌套的方式保存这些数据?

在我的代码下面找到

var newData = {}; var transactionDataRetrieved = [];
newData.TransactionTime= "Thu 20:11",
newData.amount= "15,000",
newData.payersNumber= "070505788",
newData.transactionNumber= "PSC999",
newData.waitersName= "Agnes Johnsson!"

transactionDataRetrieved.push({newData: newData}); 

transactionDataRetrieved.push(JSON.parse(localStorage.getItem('transactionData')));
localStorage.setItem('transactionData', JSON.stringify(transactionDataRetrieved));

3 个答案:

答案 0 :(得分:2)

问题在于您每次都将旧值推到新数组上,然后又将其保存回去。这是一个(未试用的)替代方法,将最新数据添加到末尾。修改它以将该数据放在开头并不难。

var transactionDataRetrieved = JSON.parse(localStorage.getItem('transactionData') || '[]');
var newData = {}; 
newData.TransactionTime = "Thu 20:11",
// ...

transactionDataRetrieved.push(newData);

localStorage.setItem('transactionData', JSON.stringify(transactionDataRetrieved));

或在单个表达式中:

localStorage .setItem ('transactionData', JSON .stringify (
    (JSON.parse (localStorage .getItem ('transactionData') || '[]') .concat (newData)
))

答案 1 :(得分:1)

您正在将阵列推向阵列

// pushing object to array
transactionDataRetrieved.push({newData: newData}); 

// pushing array to array
// localStorage.getItem('transactionData') returns array
// because you created, var transactionDataRetrieved = []; as array
transactionDataRetrieved.push(JSON.parse(localStorage.getItem('transactionData')));
localStorage.setItem('transactionData', JSON.stringify(transactionDataRetrieved));

你应该做什么

transactionDataRetrieved.push({newData: newData}); 

// changed push to concat
var newArray = transactionDataRetrieved.concat(JSON.parse(localStorage.getItem('transactionData')));
localStorage.setItem('transactionData', JSON.stringify(newArray));
  

concat()方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。

答案 2 :(得分:0)

您的代码中有一些小问题,我想对其进行编辑检查:

var newData = {}; 
newData.TransactionTime= "Thu 20:11",
newData.amount= "15,000",
newData.payersNumber= "070505788",
newData.transactionNumber= "PSC999",
newData.waitersName= "Agnes Johnsson!"
// **newData** is already an Object so don't wrap it in an object
//First get data from the localStorage;
//store it in array of Objects
var transactionDataRetrieved = localStorage.getItem('transactionData');
transactionDataRetrieved.push(newData); 
//Now set this array in local storage
localStorage.setItem('transactionData', transactionDataRetrieved);