Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript推送函数没有';在代码中似乎无法正常工作_Javascript_Arrays - Fatal编程技术网

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
中。每次都需要创建一个新数组您的循环。另请参见。