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 の extends メソッドは、真の値が初期引数として渡されるとディープ コピーを実行します。

$.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を使用して、最初のパラメーターとして true を渡すことでディープ コピーを実行できます。

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

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

于 2013-09-25T08:33:25.743 に答える
0

extendtrue 値が最初の引数として渡されたときにディープ コピーを実行するので、次のことができます。

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

詳細については、これに関するドキュメントを参照してください。

これで問題は解決します。

于 2013-09-25T08:31:13.950 に答える
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 に答える