【问题标题】:Merging 2 arrays in local storage in javascript在javascript中合并本地存储中的2个数组
【发布时间】:2016-02-24 08:53:52
【问题描述】:

我正在尝试将一个对象数组(新)附加到已经内置了一些对象数组(以前)的本地存储中。具体来说,我想在本地存储中合并这两个数组(以前的和新的) . 已尝试以下代码:

 function appendToStorage(name, data)
 {
    var old = localStorage.getItem(name);
    if(old === null) 
      old = "";
    localStorage.setItem(name, old.concat(data));
 }

 appendToStorage('ObjAry', JSON.stringify(objectIdArray));

这是我得到的输出:

["IrGszUBa0F","l366vn6mPa","2qn7JUoRwg","s2fZa0mXnb","WIaXLwmXRa"]["ZKHtnHoHgH","rtbI1sDfPm","U1eVDi9bNM","tUGNCl6hNl","lkq6tswVsZ"]

我想要的是,第二个数组应该附加到第一个数组,所以输出变成:

["IrGszUBa0F","l366vn6mPa","2qn7JUoRwg","s2fZa0mXnb","WIaXLwmXRa","ZKHtnHoHgH","rtbI1sDfPm","U1eVDi9bNM","tUGNCl6hNl","lkq6tswVsZ"]

谁能指导我做错了什么?

【问题讨论】:

    标签: javascript html arrays json local-storage


    【解决方案1】:

    你已经很接近了,只有三个小错误:

    1. 您在连接数组之前对数组进行了字符串化(因此您将字符串附加到数组)。
    2. old 的默认值是一个字符串,应该是一个数组吧?
    3. 为了使用本地存储中的数组,您需要使用JSON.parse再次解析它。

    生成的代码将是:

     function appendToStorage(name, data)
     {
        var old = localStorage.getItem(name);
        if(old == null) {
          old = [];
        } else {
          old = JSON.parse(old);
        }
        localStorage.setItem(name, JSON.stringify(old.concat(data)));
     }
    
     appendToStorage('ObjAry', objectIdArray);
    

    如果您的本地存储条目也可能包含其他值,您可以在代码中添加一个 try ... catch 块,以确保 JSON.parse 在解析值失败时不会崩溃:

     function appendToStorage(name, data)
     {
        var old = localStorage.getItem(name);
        try {
          old = JSON.parse(old);
        } catch(e) {
          old = [];
        }
        localStorage.setItem(name, JSON.stringify(old.concat(data)));
     }
    
     appendToStorage('ObjAry', objectIdArray);
    

    【讨论】:

    • Thanku nils...像魅力一样工作... :)
    【解决方案2】:

    您正在连接从

    返回的整个对象
    JSON.stringify(objectIdArray)
    

    试试

    appendToStorage('ObjAry', objectIdArray);
    

    【讨论】:

      【解决方案3】:

      LocalStorage 通过字符串键存储字符串值。要将数组/对象存储为字符串,我们将它们序列化为 JSON。所以你需要在getItem之后解析JSON,将解析后的值与新的数据部分合并,将合并的对象转换为JSON并传递给setItem

      function appendToStorage(name, data) {
        var old = localStorage.getItem(name) || '[]';
        var oldObject = JSON.parse(old) || [];
        var merged = oldObject.concat(data);
        localStorage.setItem(name, JSON.stringify(merged));
      }
      
      appendToStorage('ObjAry', objectIdArray);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-20
        • 1970-01-01
        • 1970-01-01
        • 2014-01-17
        相关资源
        最近更新 更多