无法在JavaScript中克隆我的对象数组

时间:2017-07-13 12:59:09

标签: javascript jquery

我想克隆我的对象数组。每个人告诉使用切片(0),但我不明白,它不工作,检查小提琴。该属性在两个阵列中都是可用的。

我想在第一个数组中编辑我的对象,而不是在我的第二个数组中。 我已经检查过:How to clone a Javascript Array of Objects?与concat相同,扩展。我找到的唯一一个是JSON.parse。我想了解为什么人们说方法切片克隆数组。

var arr = [{'obj1':1}, {'obj2':2}];
var clone = arr.slice(0);
clone[0].test = "defined";

https://jsfiddle.net/zkzv2mp0/2/

3 个答案:

答案 0 :(得分:0)

var clone = JSON.parse(JSON.stringify(arr));

您可以使用JSON Stringify和JSON Parse来克隆数组。但请注意,只有当您的数组包含JSON可序列化内容时,此方法才有效。

答案 1 :(得分:0)

小提琴手是纯粹的JS。没有包括jquery。

参见工作示例:

https://jsfiddle.net/zkzv2mp0/3/

但正如您所看到的,使用slice(0);是一个Shallow克隆,您希望在不更新原始版本的情况下更新一个(深度克隆)JSON.parse(JSON.stringify(arr))

答案 2 :(得分:0)

cristal不清楚你想做什么......

但这是我认为你试图实现的目标:

// Your initial array of objects.
var arr = [{'obj1':1}, {'obj2':2}];

// A cloned array of objects.
var clone = jQuery.extend(true, [], arr);

// Now sliced, keep the first object only
clone = clone.slice(0,1);
console.log(clone);

// Change the value of the object.
clone[0].obj1 = "defined";
console.log(clone);

// Show them in page.
$("#testarr").html(arr[0].obj1);
$("#testclone").html(clone[0].obj1);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<p>
In arr :
<span id="testarr">
</span></p>
<p>
In clone :
<span id="testclone">
</span>
</p>