Javascript推送函数没有';在代码中似乎无法正常工作
问题陈述: 清洁房间功能: 输入Javascript推送函数没有';在代码中似乎无法正常工作,javascript,arrays,Javascript,Arrays,问题陈述: 清洁房间功能: 输入 [1,2,4591392391,2,5,10,2,1,1,1,20,20],, 创建一个函数,将这些元素组织到有序的单个数组中。 例如,答案(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) {
[1,2,4591392391,2,5,10,2,1,1,1,20,20]
,,
创建一个函数,将这些元素组织到有序的单个数组中。
例如,答案(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)
const arrNum=[1,2,4591392391,2,5,10,2,1,1,1,20,20];
职能组织(arr){
设finalarr=[];
让arrnew=[];
设val=0;
sort((函数(a,b){返回a-b}));
//控制台日志(arr);
for(i=0;i对象和数组作为指向原始对象的指针推送。内置的基本类型(如数字或布尔值)作为副本推送
在您的代码中,您正在finalarr
finalarr.push(arrnew);
这意味着arrnew
的引用被推入finalarr
因此,在对
循环进行第一次迭代之后:
finalarr = [[1,1,1,1]]
arrnew = [1,1,1,1]
这里数组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 = [[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=[]
描述您认为代码的功能(在您的帖子中,而不是作为评论),然后再看看你的代码:它真的是这样吗?你可能想检查这个函数:在arr.sort中,不需要给出比较器函数我唯一的问题是在返回最终数组时,它只是多次附加原始数组的最后一项。在那之前,一切似乎都很好,但返回的结果并没有给出所需的values.If I do finalarr=finalarr.concat(arrnew),我按顺序获取所有元素,但将其作为最终数组中的单个元素。我需要在最终数组中包含1数组、2数组等。问题不在于finalarr
,而在于newarr
。您多次将相同的可变数组放入finalarr
中。每次都需要创建一个新数组您的循环。另请参见。