我正在尝试在本地存储中添加聊天消息。 为此,我写了以下代码:
var oldMessages = JSON.parse(localStorage.getItem(self+'_'+other)) || [];
var newMsg = [{
'from':self,
'to':other,
'msg':text
}];
newMsg.push(oldMessages);
localStorage.setItem(self+'_'+other,JSON.stringify(newMsg));
为此,我得到输出:
9015825_9032836 :" [{" from":" 9015825"," to":" 9032836"," msg&#34 ;:"嗨\ n"},[{"来自":" 9015825","到":" 9032836&#34 ;," MSG":"你好\ n"},[{"从":" 9015825""到&#34 ;:" 9032836"" MSG":" Bbye \ n"},[]]]]"
而我希望输出为
9015825_9032836:" [{" from":" 9015825"," to":" 9032836",&#34 ; msg":"嗨\ n"},{"来自":" 9015825","到":" 9032836"" MSG":"你好\ n"},{"从":" 9015825""到& #34;:" 9032836"" MSG":" Bbye \ n"},]"
这样我就可以在需要时迭代对象。 任何帮助将非常感谢。感谢。
答案 0 :(得分:1)
您可能想要检查数组Concat。
var newMsg = [{
'from':self,
'to':other,
'msg':text
}];
var mergedArray = newMsg.concat(oldMessages);
localStorage.setItem(self+'_'+other,JSON.stringify(mergedArray ));
您希望将旧消息数组与创建的newMsg
数组合并。或者您可能只想为newMsg
创建一个对象而不是数组,并将该对象推送到oldMessages
并在字符串化时将其设置为localstorage。
答案 1 :(得分:1)
您应该展平oldMessages
的内容,而不是添加数组(newMsg
)作为oldMessages
的元素。
您可以使用...
(spread operator)。
var newMsg = [{
'from':self,
'to':other,
'msg':text
},
...oldMessages
];
当然,即使在较旧的ES5语法中,也有很多方法可以做很相似的事情。
另一种方法是使用更好的Array push版本,它将oldMessages的内容连接到newMsg:
Array.prototype.push.apply(newMsg, oldMessages);
因为您的新消息只是一个对象,所以最好只将对象添加到堆栈顶部。这可以使用Array unshift方法完成。
var messages = JSON.parse(localStorage.getItem(self + '_' + other)) || [];
var newMessage = {
'from': self,
'to': other,
'msg': text
};
messages.unshift(newMessage);
localStorage.setItem(self + '_' + other, JSON.stringify(messages));
请注意, newMessage 现在是一个对象,而不是一个数组, unshift 使它成为消息数组的第一个元素。
类似于传播,推动和不移位; concat 方法通过组合其他两个来创建一个新数组。它更像传播运算符,因为内容是扁平的,原始数组不会发生变异。
var oldMessages = JSON.parse(localStorage.getItem(self + '_' + other)) || [];
var newMessage = [{
'from': self,
'to': other,
'msg': text
}];
messages = newMessage.concat(oldMessages);
localStorage.setItem(self + '_' + other, JSON.stringify(messages));
答案 2 :(得分:0)