2014-02-20 27 views
9

所以我有一个数组stringited'ed和保存在我的localStorage'人'键下。如何更新本地存储中的json值

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(可以说输入的是人与名二),我的做法是获得和分析我的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对象。

+0

您正在对'aCustomers'进行字符串化。那是你要的吗? –

+0

这是一个错误!应该是人! –

+0

这是否解决了问题,还是有其他问题? –

回答

20

您需要像最初一样再次将对象设置回来,现在您只能分割一个数字,而不是对象。

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 
+0

当然! DOH!如此接近:) 非常感谢冠军。 –

+0

epascarello唯一的一点是它在年龄数字后面添加了2,而不是将它们加在一起。即时通讯2作为一个变量 - 你有什么想法? –

+0

'persons [i] .age = parseInt(persons [i] .age,10)+ 2;' – epascarello