jQuery从数组扩展一个json元素

jquery extend a json element from an array

本文关键字:一个 json 元素 数组 扩展 jQuery      更新时间:2023-09-26

这是我的原始数组:

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都被改变了。我只想改变复制数组。它们都更改为下面:

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

这是我的小提琴来展示这一点:http://jsfiddle.net/LesignButure/GFVUy/

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

jQuery的exten方法在将true值作为初始参数传递时执行深度复制:

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

吉斯菲德尔

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

试试这个..

extend 当 true 值作为第一个参数传递时执行深度复制,因此您可以这样做

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

有关详细信息,请参阅有关此内容的文档。

这解决了您的问题。

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

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

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

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

纯脚本

function extendArray() {
    return Array.prototype.concat.apply([], arguments);
}
<</div> div class="answers">

试试这个

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

查看演示