我有一个名为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;});
最后,我将productArray
中的前三个单元格提取到名为resultArray
的第三个对象:
var resultArray= [];
resultArray = productArray.splice(0,3);
令我惊讶的是,这会将products.original
的长度减少3(拼接)。为什么?我该怎么做才能阻止这个?提前谢谢。
答案 0 :(得分:2)
您没有复制数组,只是复制它。因此,所有操作仍在原始对象上执行。 对于真正的克隆,请使用slice。
productArray = products.original.slice(0);
答案 1 :(得分:2)
尝试这种方式:
productArray = products.original.slice();
在javascript对象中通过引用传递。
答案 2 :(得分:2)
答案 3 :(得分:0)
这在JavaScript中是可以预期的。 这个post可以帮助您解决问题。
答案 4 :(得分:0)
行
productArray = products.original;
实际上并没有将products.original复制到productArray中。而是复制引用。这意味着每次更改productArray时,您也会更改原始对象。为了(深度)复制嵌套对象,你必须做一些复杂的事情,比如迭代对象的成员,检查它们是数组还是对象(将通过引用复制),迭代它们并复制简单数据类型。另一种方法是使用提供复制功能的下划线或jquery。从您的排序功能来看,您的阵列似乎只包含数字。在这种情况下,slice可以解决问题。
请参阅此处查看jquery示例(Deep) copying an array using jQuery