用javascript数组填充JSON并修改条目
修改JSON数组(嵌套到另一个数组中)似乎不适合以下代码:用javascript数组填充JSON并修改条目,javascript,arrays,json,Javascript,Arrays,Json,修改JSON数组(嵌套到另一个数组中)似乎不适合以下代码: var names = [{'name': 'ourname'},{'name': 'yourname'}] ; var array = [{ "year": "2015", names },{ "year": "2016", names }]; 我无法通过此操作修改“数组”中的单个名称条目 array[0].names[1].n
var names = [{'name': 'ourname'},{'name': 'yourname'}] ;
var array = [{
"year": "2015",
names
},{
"year": "2016",
names
}];
我无法通过此操作修改“数组”中的单个名称条目
array[0].names[1].name="MY NAME"
因为它实际上正在修改行“0”中的所有名称条目:
输出:
0:0 ourname
0:1 MY NAME
1:0 ourname
1:1 MY NAME
普朗克
我正在寻找一种干净的方法来实现对名称数组的一次适当修改,因为我希望避免循环
感谢您的帮助您应该尝试复制名称数组,每个“唯一”用例复制一次,因为Javascript有时会偷偷地引用 一种方法是编写一个
deepclone()
方法来对层次对象进行深度复制
var array = [{
"year": "2015",
names: deepclone(names)
},{
"year": "2016",
names: deepclone(names)
}];
因为它们指向同一个数组,而且,仅仅通过
克隆名称
。切片
是不够的,因为数组包含对象
而不是基本类型,所以需要从原始名称
深度克隆并分配给每个对象。
因此,您需要将代码更改为:
var array = [{
"year": "2015",
names: JSON.parse(JSON.stringify(names))
}, {
"year": "2016",
names: JSON.parse(JSON.stringify(names))
}];
请参见已编辑的
我使用
JSON.parse(JSON.stringify(names))
从原始数组简单地创建do deep clone,这里还有其他方法 在对象(javascript对象)中需要一个key:value
没问题,请注意,如果对象不是很深很小,那么JSON.parse(JSON.stringify)很容易使用。如果你想找到更多关于深度克隆的信息,这是很好的。
var names = [{'name': 'ourname'},{'name': 'yourname'}] ;
var array = [{
"year": "2015",
"names": names
},{
"year": "2016",
"names": names
}];
var wName = array[0].names[1].name;
// yourname