jquery从数组扩展json元素

问题描述 投票:4回答:6

这是我的原始数组:

var myArray = [
   {"A":"1", "B":"2"},
   {"C":"3", "D":"4"},
   {"E":"5", "F":"6"}
]

然后我创建此myArray的副本:

var copyArray = $.merge([], myArray);

现在我只想扩展copyArray的第一个元素:

$.extend(copyArray[0], { "Hello": "World" });

但是结果是myArray和copyArray均已更改。我只想更改copyArray。它们都更改为以下:

[
   {"A":"1", "B":"2", "Hello":"World"},
   {"C":"3", "D":"4"},
   {"E":"5", "F":"6"}
]

这是我的小提琴,以显示此内容:http://jsfiddle.net/LesignButure/GFVUy/

javascript jquery json
6个回答
0
投票

如果对象存在于数组中,则保留引用;即它不会进行深层复制。

当将真实值作为初始参数传递时,jQuery的extend方法执行深度复制:

$.extend(true, [], myArray );

JSFIDDLE


1
投票
var myArray = [
       {"A":"1", "B":"2"},
       {"C":"3", "D":"4"},
       {"E":"5", "F":"6"}
    ];
var copyArray = $.extend(true, [], myArray);
$.extend(copyArray[0], { "Hello": "World" });
console.log(myArray);
console.log(copyArray);

尝试一下..


0
投票

extend在将真值作为第一个参数传递时执行深度复制,因此可以执行

var copyArray = $.extend(true, [], myArray);

有关更多信息,请参见the docs。>>

这解决了您的问题。


0
投票

您可以通过将true作为第一个参数传递来使用$.extend进行深度复制:


0
投票

使用jQuery $ .extend或纯javascript


-1
投票

尝试一下

© www.soinside.com 2019 - 2024. All rights reserved.