Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.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 将原始阵列与深度克隆进行比较,不起作用_Javascript_Arrays_Object_Clone - Fatal编程技术网

Javascript 将原始阵列与深度克隆进行比较,不起作用

Javascript 将原始阵列与深度克隆进行比较,不起作用,javascript,arrays,object,clone,Javascript,Arrays,Object,Clone,我试图测试数组的深层克隆是否与原始对象相同(jQuery可用) 下面是我如何克隆它的 self.slides = jQuery.extend(true, {}, parent.modules[self.moduleId].composed); 然而,我最终得到了两个稍有不同的对象,所以即使我关心的实际内容是相同的,这两个对象也不是。如果我在chrome控制台中转储它们,它们的外观如下: 原始对象: [Object] 0: Object length: 1 __proto__: Array[0]

我试图测试数组的深层克隆是否与原始对象相同(jQuery可用)

下面是我如何克隆它的

self.slides = jQuery.extend(true, {}, parent.modules[self.moduleId].composed);
然而,我最终得到了两个稍有不同的对象,所以即使我关心的实际内容是相同的,这两个对象也不是。如果我在chrome控制台中转储它们,它们的外观如下:

原始对象:

[Object]
0: Object
length: 1
__proto__: Array[0]
克隆:

Object {0: Object}
0: Object
__proto__: Object
因此,克隆看起来实际上是一个对象(或object类型的对象),而原始对象看起来是一个数组(或array类型的对象)


是否有其他克隆方法,或者如何执行此标识测试?

之所以会出现这种情况,是因为您正在传递对象“{}”扩展程序以尝试以这种方式进行克隆,我相信这样会更好

var clone = myArray.slice(0);

克隆任何对象的最简单方法是

var array1 = [1, [2], 3];
var array2 = JSON.parse(JSON.stringify(array1));
你可以这样检查

console.log(array1, array2);
// [ 1, [ 2 ], 3 ] [ 1, [ 2 ], 3 ]

array1[1][0] += 3;

console.log(array1, array2);
// [ 1, [ 5 ], 3 ] [ 1, [ 2 ], 3 ]

数组是一种对象类型,如果克隆算法不知道如何创建新数组,它将“退回”到创建通用对象。此外,您正在扩展,这与创建克隆略有不同。但是,我在原始数组中可能拥有的所有对象都不会被克隆,而只是被克隆引用,对吗?这是不可接受的,因为我需要能够在不影响克隆的情况下更改原始数组的内容(我克隆的全部目的)。不要。您要做的是用这些值扩展这个对象“{}”​​这是“parent.modules[self.moduleId].composited”的一部分。它们是不同的对象。我同意你的建议,现在我的应用程序按预期运行,谢谢。然而,我尝试了多个非JSONSTRIGFY方法来比较两个结果数组,其中没有一个对我有效(即使是真正的高投票率答案),在平等性测试中获得true的唯一方法是将两个数组转换为字符串(JSONSTRIGFY)。。。古怪的