如何使用JavaScript更新或添加数组中的值?

时间:2016-03-07 21:39:14

标签: javascript jquery arrays

我在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'未定义或空引用。

如何正确更新数组。

3 个答案:

答案 0 :(得分:6)

问题不在于assigned_at不存在,而是data['123']不存在,因此未定义。

尝试data[0]['123']

BTW:你似乎不理解数组和/或对象,因为你在每个数组中都放了一个对象。

答案 1 :(得分:5)

在这种情况下,你可能想要最简单的数据形式,因此括号是不必要的:

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 :(得分:2)

因此,您遇到的问题是您认为在使用数组时实际使用的是散列映射。所以当你写下这样的东西时:

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对象所看到的那样,它是一个包装哈希映射的数组(这实际上是不必要的)。如果您真的要正确使用此对象,则需要编写

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

哪个会奏效。我认为你只是通过在你的价值观中添加[]而让自己有点混乱。