2014-02-20 49 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