Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery从数组扩展json元素_Javascript_Jquery_Json - Fatal编程技术网

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);
}