Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.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 - Fatal编程技术网

Javascript 为什么我的原始对象在“我”之后会受到影响;抄袭;它是一个新的对象吗?

Javascript 为什么我的原始对象在“我”之后会受到影响;抄袭;它是一个新的对象吗?,javascript,Javascript,我有一个名为products.original的(子)对象 然后将其提取到名为productArray的新对象: var productArray = []; productArray = products.original; /*some calculations here*/ //sort the object by lowest score productArray.sort(function(a, b) {return a.score - b.score;}); var resu

我有一个名为
products.original
的(子)对象

然后将其提取到名为
productArray
的新对象:

var productArray = [];

productArray = products.original;

/*some calculations here*/

//sort the object by lowest score
productArray.sort(function(a, b) {return a.score - b.score;});
var resultArray= [];        
resultArray = productArray.splice(0,3);
最后,我将
productArray
中的前三个单元格提取到名为
resultArray
的第三个对象:

var productArray = [];

productArray = products.original;

/*some calculations here*/

//sort the object by lowest score
productArray.sort(function(a, b) {return a.score - b.score;});
var resultArray= [];        
resultArray = productArray.splice(0,3);

令我惊讶的是,这将
products.original
的长度减少了3(拼接)。为什么?我该怎么做才能阻止这一切?提前感谢。

您没有复制阵列,只是复制了对它的引用。因此,所有操作仍在原始对象上执行。 用于真正的克隆

试着这样做:

productArray = products.original.slice();
在javascript中,对象是通过引用传递的。

更改数组的内容,在删除旧元素的同时添加新元素

你想要:

返回数组部分的一级深度副本


这在JavaScript中是预期的。 这将有助于解决您的问题。

该行

productArray = products.original;
不会将products.original实际复制到productArray中。相反,它复制了一个引用。这意味着每次更改productArray时,您也在更改原始对象。为了(深度)复制嵌套对象,您必须执行一些复杂的操作,例如迭代对象的成员,检查它们是数组还是对象(将通过引用进行复制),迭代这些对象并复制简单的数据类型。另一种方法是使用下划线或jquery,它们提供复制功能。从排序函数判断,数组似乎只包含数字。在这种情况下,我会成功的


参见这里的jquery示例

您应该去掉
=[]
。如果要在下一行为变量分配不同的数组,则创建数组并将其分配给变量没有意义。