【问题标题】:How to update json value in localstorage如何更新本地存储中的 json 值
【发布时间】:2014-03-22 06:06:28
【问题描述】:

所以我有一个数组 stringify'ed 并保存在我的 localStorage 中的“persons”键下。

arr = [{"name":"a", "age": 1, "sport":"football"},
{"name":"b", "age": 2, "sport":"volley"},
{"name":"c", "age": 3, "sport":"basket"}];
localStorage.setItem('persons', JSON.stringify(arr));

当我需要更新姓名为 x 的人的年龄时(假设输入是姓名为 b 的人),我的方法是获取并解析我的 localStorage 密钥:

var persons = JSON.parse(localStorage.persons);

然后我创建一个 for 循环来遍历对象并找到名称为 b 的对象:

for (var i = 0; i < persons.length; i++) {
   if(inputName === persons[i].name){
       persons[i].age += 2
       localStorage.setItem("persons", JSON.stringify(aCustomers[i].age));
   }
}

这似乎不起作用。 我在循环中找到了我的匹配项,但我不知道如何将 2 年添加到年龄并在我的 localStorage.persons 中更新该值而不覆盖和破坏 json 对象。

【问题讨论】:

  • 你正在字符串化aCustomers。这就是你想要的吗?
  • 这是一个错误!应该是人!
  • 这能解决问题吗,还是有其他问题?
  • epascarello 已修复,谢谢! :-)

标签: javascript json loops local-storage


【解决方案1】:

您需要像原来一样重新设置对象,现在您只存储一个数字,而不是对象。

var persons = JSON.parse(localStorage.persons);
for (var i = 0; i < persons.length; i++) {
   if(inputName === persons[i].name){  //look for match with name
       persons[i].age += 2;  //add two
       break;  //exit loop since you found the person
   }
}
localStorage.setItem("persons", JSON.stringify(persons));  //put the object back

【讨论】:

  • epascarello 唯一的问题是它在年龄数字后添加了 2 而不是将它们加在一起。我将 2 作为变量传递 - 你有什么想法吗?
  • persons[i].age = parseInt(persons[i].age,10) + 2;
  • 似乎不起作用。对了,我可以在控制台中看到 person[i].age 是一个字符串,但在 json 中它是一个数字??
  • 我正在添加另一个变量(在这种情况下为 2),我在其中做了 parseInt 然后它起作用了。
猜你喜欢
  • 2018-02-18
  • 2020-10-27
  • 2020-07-07
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 2015-06-14
  • 1970-01-01
  • 2022-07-26
相关资源
最近更新 更多