用javascript数组填充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

修改JSON数组(嵌套到另一个数组中)似乎不适合以下代码:

   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