[英]Javascript push function doesn't seem to work correctly in code
问题陈述:清理房间函数:输入[1,2,4,591,392,391,2,5,10,2,1,1,1,20,20]
,制作一个函数,将这些组织成有序的单个数组。 例如 answer(ArrayFromAbove) 应该返回:
[[1,1,1,1],[2,2,2], 4,5,10,[20,20], 391, 392,591].
我的代码:
const arrNum = [1,2,4,591,392,391,2,5,10,2,1,1,1,20,20] ;
function org(arr) {
let finalarr = [];
let arrnew = [];
let val = 0;
arr.sort((function(a, b){return a-b}));
//console.log(arr);
for (i=0; i<arr.length; i++){
if (arr[i] != 0) {
val = arr[i];
arrnew.length = 0;
arrnew.push(arr[i]);
arr[i] = 0;
for (j=0; j<arr.length; j++){
if (arr[j] == val && arr[j] != 0) {
arrnew.push(arr[j]);
arr[j] = 0;
}
}
finalarr.push(arrnew);
console.log(arrnew);
}
}
return finalarr;
console.log(finalarr)
}
org(arrNum)
但这似乎没有给出想要的答案:不确定我做错了什么。 我找到了其他解决方案,但我需要知道我的代码有什么问题。
对象和数组作为指向原始对象的指针推送。 数字或布尔值等内置原始类型作为副本推送。
在您的代码中,您正在arrnew
中finalarr
finalarr.push(arrnew);
这意味着arrnew
引用被推入finalarr
。
所以在for
循环的第一次迭代之后:
finalarr = [[1,1,1,1]]
arrnew = [1,1,1,1]
这里数组finalarr
元素finalarr
是指向数组arrnew
指针。
所以,在第二次迭代中,语句
arrnew.length = 0
将清空数组arrnew
,因为数组finalarr
有指向数组的指针,它也会被修改:
finalarr= [[]]
然后内部for
循环将推动数组arrnew
= [2,2,2]
三个2
,因此finalarr
变为[[2,2,2]]
。
在第二次迭代结束时finalarr.push(arrnew);
将在finalarr
推送一个新的arrnew
finalarr
。 所以finalarr
将成为
finalarr = [[2,2,2], [2,2,2]]
因此,在所有迭代的结尾, finalarr
将有9个指针,所有指向arrnew
和最终值在arrnew
为[591]。
finalarr = [[591],[591],[591],[591],[591],[591],[591],[591],[591]]
您可以更新代码,只需将arrnew.length = 0
替换为arrnew = []
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.