我想克隆我的对象数组。每个人告诉使用切片(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";
答案 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>