2016-03-07 66 views
1

我有一個使用JavaScript的變量中的數組數組。我想用子數組更新一個值,而不必複製臨時數組。如何使用JavaScript更新或添加數組中的值?

這裏是一個例子。

我有這樣的陣列

var data= [{ 
      '123': [{'a': 10, 'b': 20, 'c': 30, 'd': 40}], 
      '456': [{'a': 1, 'b': 2, 'c': 3, 'd': 4}] 
      }]; 

我希望能夠當a現有更改123鍵的內部a值。否則,我想創建該密鑰。另外,如果'a'不存在於子數組中,我想添加它而不是拋出錯誤。

我試圖更新

data['123']['assigned_at'] = 'value'; 

但由於assigned_at不存在,我收到此錯誤

無法設置屬性「assigned_at」的未定義或空引用。

如何正確更新數組。

+0

嘗試數據[0] ['123'] – Jaaaaaaay

+0

看起來'data'是一個包含單個對象的數組,其中包含一個對象,該對象返回時保存着鍵'123','456'。這是一個錯字嗎? 哦,'123'和'456'又是隻有一個對象的數組 - 所以完整路徑是:'data [0] [123] [0] [「a」]' – yoshi

回答

6

您的問題不是assigned_at不存在,而是data['123']不存在,因此未定義。

嘗試data[0]['123']

順便說一句:你似乎不理解數組和/或對象,因爲你將一個對象放在每個數組中。

+0

對不起,我想我的例子只是拋開一切。這裏是我如何定義我的數組var data = [];然後我添加一個鍵和數組數據['123'] ['assigned_at'] ='value'。我希望這能更好地解釋我正在嘗試做什麼.PS:data [0] ['123']現在仍在工作。 –

+0

@MikeA你問你的問題,而不是告訴你有什麼你真的沒有的東西?當你在它的時候,創建一個MCVE – Amit

5

你可能想這將是在這種情況下JSON數據的simpliest形式,所以括號內是不必要的:

var data= { 
      '123': {'a': 10, 'b': 20, 'c': 30, 'd': 40}, 
      '456': {'a': 1, 'b': 2, 'c': 3, 'd': 4} 
      }; 

現在,你可以得到的項目是這樣的:

data['123']; 
// and the nested objects: 
data['123']['a']; 

你所擁有的是一個帶有一個JSON元素的數組,所以你可以用下面的代碼得到它:

data[0]['123'] 
// and for the nested objects: 
data[0]['123'][0]['a'] 
2

所以你的問題是,你認爲你在使用數組的時候正在使用hashmap。所以當你寫這樣的東西:

var data= [{ 
     '123': [{'a': 10, 'b': 20, 'c': 30, 'd': 40}], 
     '456': [{'a': 1, 'b': 2, 'c': 3, 'd': 4}] 
     }]; 

console.log(data["123"]) 

你會得到一個錯誤,因爲你試圖索引一個數組與字符串。正如你通過查看你的data對象所看到的那樣,它是一個包裝hashmap的數組(這實際上是不必要的)。如果你真的打算使用這個對象正確,你需要寫

var data= [{ 
     '123': [{'a': 10, 'b': 20, 'c': 30, 'd': 40}], 
     '456': [{'a': 1, 'b': 2, 'c': 3, 'd': 4}] 
     }]; 

console.log(data[0]["123"]) 

,它將打印[{'a': 10, 'b': 20, 'c': 30, 'd': 40}]

如果你想要一個新的密鑰分配到data[0]["123"],因爲你裹在數組中的值,以及,你需要寫

var data= [{ 
     '123': [{'a': 10, 'b': 20, 'c': 30, 'd': 40}], 
     '456': [{'a': 1, 'b': 2, 'c': 3, 'd': 4}] 
     }]; 

data[0]["123"][0]["assigned_at"] = 52 //or w/e you want here 

我建議下探圍繞你的價值觀[]包裝並且只寫

var data= { 
     '123': {'a': 10, 'b': 20, 'c': 30, 'd': 40}, 
     '456': {'a': 1, 'b': 2, 'c': 3, 'd': 4} 
     }; 

data["123"]["assigned_at"] = 52 //or w/e 

哪個會起作用。我認爲你只是通過增加[]來讓你自己有點混淆你的價值觀。

相關問題