Javascript jquery从数组扩展json元素
这是我的原始阵列:Javascript jquery从数组扩展json元素,javascript,jquery,json,Javascript,Jquery,Json,这是我的原始阵列: 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都被更改了
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"}
]
这里是我的小提琴来展示这一点:如果数组中存在对象,则会保留引用;即 它不做深度复制 当传递真值作为初始参数时,jQuery的extend方法执行深度复制:
$.extend(true, [], myArray );
extend
在将真值作为第一个参数传递时执行深度复制,因此您可以这样做
var copyArray = $.extend(true, [], myArray);
有关更多信息,请参阅
这就解决了您的问题。您可以通过将true作为第一个参数来进行深度复制:
var copyArray = $.extend(true, [], myArray);
试试这个
var copyArray = $.extend(true, [], myArray);
$.extend(copyArray[0], { "Hello": "World" });
看
尝试使用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);
}
我只是扩展了copyArray,它是一个新的数组。为什么它会影响原始myArray..您复制了数组,但原始数组没有对象,只有指向它们的指针。因此,如果您在其中任何一个中进行修改,另一个都会受到影响,直到并且除非您执行深层次的copySo$.merge生成浅层复制?哦,对不起,我是说$.extend()。输入错误。是的,除非您将“true”作为第一个参数传递。因此,如果您只执行$.extend([],myArray),这将执行浅拷贝,但如果您执行$.extend(true,[],myArray)-它将执行深拷贝,这很好!没问题。
function extendArray() {
return Array.prototype.concat.apply([], arguments);
}