2016-03-07 65 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 

哪个会起作用。我认为你只是通过增加[]来让你自己有点混淆你的价值观。

相关问题