如何使用JavaScript在数组中更新或添加值?
我在JavaScript中使用的变量中有一个数组数组。我想用子数组更新值,而不必临时复制数组 这里有一个例子 我有这个数组如何使用JavaScript在数组中更新或添加值?,javascript,arrays,Javascript,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的值。否则,我要创建该键。另外,如果子数组中不
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';
但由于分配的_at不存在,我得到了这个错误
无法设置undefined
或null
引用的属性“assigned_at”
如何正确更新阵列
var数据=[{
'123': [{
“a”:10,
“b”:20,
“c”:30,
d:40
}],
'456': [{
"a":1,,
“b”:2,
"c":3,,
d:4
}]
}];
数据['123']['assigned_at']='value'代码>您的问题不在于在处分配的\u不存在,而是数据['123']
不存在,因此未定义
请尝试数据[0]['123']
顺便说一句:你似乎不理解数组和/或对象,因为你在每个数组中都放了一个对象。你的问题不是分配给的不存在,而是数据['123']
不存在,因此没有定义
请尝试数据[0]['123']
顺便说一句:您似乎不理解数组和/或对象,因为您在每个数组中都放置了一个对象。您可能需要最简单的数据形式,在本例中为JSON,因此不需要括号:
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']
在本例中,您可能需要最简单的数据形式,即JSON,因此不需要括号:
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']
所以你们的问题是,你们认为你们在使用一个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"])
您将得到一个错误,因为您试图用字符串索引数组。通过查看数据
对象可以看到,它是一个包装哈希映射的数组(实际上不需要)。如果你真的要正确使用这个对象,你需要写
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"])
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
它将打印[{'a':10,'b':20,'c':30,'d':40}]
如果您想将一个新键分配到数据[0][“123”]
,因为您也将值包装在数组中,所以需要编写
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"])
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
这会管用的。我认为您只是因为在值中添加了[]
而给自己造成了一点混乱。所以您的问题是,您认为自己在使用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"])
您将得到一个错误,因为您试图用字符串索引数组。通过查看数据
对象可以看到,它是一个包装哈希映射的数组(实际上不需要)。如果你真的要正确使用这个对象,你需要写
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"])
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
它将打印[{'a':10,'b':20,'c':30,'d':40}]
如果您想将一个新键分配到数据[0][“123”]
,因为您也将值包装在数组中,所以需要编写
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"])
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
这会管用的。我想你只是把[]
添加到你的值中给自己造成了一点混乱。看来数据
是一个包含单个对象的数组,该数组反过来包含键123
,456
。那是打字错误吗?Oh和123
和456
同样是只有一个对象的数组-因此完整路径应该是:data[0][123][0][a][a”
看起来data
是一个包含单个对象的数组,该数组反过来包含键123
,456
。那是打字错误吗?哦,和123
和456
同样是只有一个对象的数组-因此完整路径应该是:data[0][123][0][a][a”
对不起,我想我的示例把一切都抛在脑后了。下面是我如何定义数组var data=[];然后我向它添加一个键和数组数据['123']['assigned_at']='value'。我希望这能更好地解释我想做的事情。PS:data[0]['123']现在仍在工作。@MikeA你问一下你的问题,而不是说你有一些你真的没有的东西,怎么样?当你这么做的时候,创建一个MCVESorry,我想我的例子就是抛开一切。下面是我如何定义数组var data=[];然后我向它添加一个键和数组数据['123']['assigned_at']='value'。我希望这能更好地解释我想做的事情。PS:data[0]['123']现在仍在工作。@MikeA你问一下你的问题,而不是说你有一些你真的没有的东西,怎么样?当你这样做的时候,创建一个MCVE