简体   繁体   English

借助本地存储来存储数据

[英]Storing data with help of localstorage

I am storing localstorage data in an array. 我将localstorage存储数据存储在数组中。 My code is: 我的代码是:

 var a;
//is anything in localstorage?
if (localStorage.getItem('session') === null) {
    a = [];
} else {
     // Parse the serialized data back into an array of objects
     a = JSON.parse(localStorage.getItem('session'));
 }
 // Push the new data (whether it be an object or anything else) onto the array
 a.push(data);
  document.write(a + "<br>")
 // Re-serialize the array back into a string and store it in localStorage
 localStorage.setItem('session', JSON.stringify(a));

where data is: data在哪里:

var data = {name: "abc", place: "xyz"}

On every page refresh, my data is getting multiplied like this: 每次刷新页面时,我的数据都会像这样成倍增加:

[{name: "abc", place: "xyz"}, {name: "abc", place: "xyz"}, {name: "abc", place: "xyz"}, {name: "abc", place: "xyz"}]

I want to store data only if value of data changes means instead of {name: "abc", place: "xyz"} , I have {name: "ijk", place: "uvx"} . 我想存储的数据,仅当值data的变化意味着不是{name: "abc", place: "xyz"}我有{name: "ijk", place: "uvx"} How can I avoid data getting multiplied on each page refresh? 如何避免每次刷新时数据倍增?

You have to look into a before inserting new data. 你必须寻找到a插入新的数据之前。

if (!a.some(filterData(data)) {
  a.push(data);
}

function filterData(data) {
  return function(item) {
    return item.name === data.name && item.place === data.place;
  };
}

You could achieve the same thing with a loop: 您可以通过循环实现相同的目的:

var found = false;
for (var i = a.length; i--;) {
  if (a[i].name === data.name && a[i].place === data.place) {
    found = true;
    break;
  }
}

if (!found) {
  a.push(data);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM