4

这是我的原始数组:

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/

4

6 回答 6

1

如果数组中存在对象,则保留引用;即它不做深拷贝。

当一个真值作为初始参数传递时,jQuery 的 extend 方法执行深拷贝:

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

JSFIDDLE

于 2013-09-25T08:30:24.250 回答
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);

试试这个..

于 2013-09-25T08:34:56.897 回答
0

extend当一个真值作为第一个参数传递时执行一个深拷贝,所以你可以这样做

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

有关更多信息,请参阅文档

这解决了你的问题。

于 2013-09-25T08:31:13.950 回答
0

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

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

http://jsfiddle.net/GFVUy/12/

于 2013-09-25T08:33:25.743 回答
0

使用 jQuery $.extend 或纯javascript

/*
 * Extend Array extra json
 * Example: 
 * $.extendArray([{a:1,b:2}],[{c:3,d:4}]) return -> [{a:1,b:2},{c:3,d:4}]
 * $.extendArray([{a:1,b:2}],{c:3,d:4}) return -> [{a:1,b:2},{c:3,d:4}]
 *
 */
$.extend({
  extendArray: function() {
    return Array.prototype.concat.apply([], arguments);
  }
});

纯 JavaScript

function extendArray() {
    return Array.prototype.concat.apply([], arguments);
}
于 2020-06-05T16:57:42.623 回答
-1

试试这个

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

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

演示

于 2013-09-25T08:33:34.037 回答