从localstorage向javascript数组添加对象

时间:2016-08-07 20:21:04

标签: javascript json local-storage

我正在尝试在本地存储中添加聊天消息。 为此,我写了以下代码:

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"},]"

这样我就可以在需要时迭代对象。 任何帮助将非常感谢。感谢。

3 个答案:

答案 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的元素。

ES6

您可以使用...spread operator)。

执行此操作
var newMsg = [{
               'from':self,
               'to':other,
               'msg':text
             },
             ...oldMessages
];

ES5

当然,即使在较旧的ES5语法中,也有很多方法可以做很相似的事情。

  1. Array push

    另一种方法是使用更好的Array push版本,它将oldMessages的内容连接到newMsg:

    Array.prototype.push.apply(newMsg, oldMessages);
    
  2. Array unshift

    因为您的新消息只是一个对象,所以最好只将对象添加到堆栈顶部。这可以使用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 使它成为消息数组的第一个元素。

  3. Array concat

    类似于传播,推动和不移位; 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)

oldMessages变量也是一个数组。 您目前正在将阵列推入阵列。

您可以使用Concat

或者像这样使用unshift

var oldMessages = JSON.parse(localStorage.getItem(self+'_'+other)) || [];
var newMsg = {
               'from':self,
               'to':other,
               'msg':text
             };
oldMessages.unshift(newMsg);
localStorage.setItem(self+'_'+other,JSON.stringify(oldMessages));