我创建了一个JavaScript函数来删除数组中的项并返回最终项。然而,这实际上是在不应该从主数组中删除项目时。
功能:
function oneRemaining(arr) {
tmp = arr;
while (tmp.length > 1) {
tmp.splice(~~(Math.random() * tmp.length), 1);
}
return tmp[0];
}
所以在运行之后,进入的数组应该仍然是相同的,因为它从未被改变,但是当我在控制台中运行时,只有1个项目。
为什么输入数组会被改变?
答案 0 :(得分:1)
您的数组更改是因为:
如果您希望这样做,请替换第二行:
tmp = arr.concat([])
希望这有帮助。
答案 1 :(得分:1)
它被改变了,因为tmp
是对arr
的引用而不是它的副本。无论何时更改引用对象中的某些内容,它都会更改原始内容
答案 2 :(得分:0)
数组是javascript中的引用类型,因此以下行不复制输入数组,它只是将变量tmp与输入数组的引用一起赋值。最后,您始终在内存中编辑相同的数组。
tmp = arr;
您可以使用arr.slice(0)来真正复制输入数组。
(你可能错过了变量tmp声明中的var,除非你想让它变成全局变量?)