我正在更新我的 localStorage ,以在客户端用户进行每次交易后存储特定数据。我注意到我的代码将数据保存为嵌套格式。这是不可取的。
如果数据以非嵌套格式存储,则将是理想的。
查找附带的描述性图像,以使您更清楚地了解我的意思。
如何编制代码以 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));
答案 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);