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示例您应该去掉
=[]
。如果要在下一行为变量分配不同的数组,则创建数组并将其分配给变量没有意义。