Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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 - Fatal编程技术网

Javascript 将所有零移到末尾--无法使接头正常工作?

Javascript 将所有零移到末尾--无法使接头正常工作?,javascript,Javascript,我试图创建一个函数,将所有0移到末尾。我首先使用for循环计算原始数组中有多少个零;还可以使用0的索引来拼接0 然后通过while循环,根据总计数将0推送到数组 我正在努力让拼接工作正常进行。。如果能得到任何意见,我将不胜感激 常量数组=[2,0,0,4,3,1]; 常数moveZeroes=arr=>{ 设零=0; fori=0;i=0{ arr.0; 零-; } console.logarr; }; 移动零阵列 因此,修改要迭代的数组是一个常见的监督错误 因此,尝试在for循环的每次迭代后

我试图创建一个函数,将所有0移到末尾。我首先使用for循环计算原始数组中有多少个零;还可以使用0的索引来拼接0

然后通过while循环,根据总计数将0推送到数组

我正在努力让拼接工作正常进行。。如果能得到任何意见,我将不胜感激

常量数组=[2,0,0,4,3,1]; 常数moveZeroes=arr=>{ 设零=0; fori=0;i=0{ arr.0; 零-; } console.logarr; };
移动零阵列 因此,修改要迭代的数组是一个常见的监督错误

因此,尝试在for循环的每次迭代后打印数组,您将看到索引在增加,但数组本身的长度在减少,这导致了这种行为


顺便说一句,splice工作正常。

因此,修改要迭代的数组是一个常见的监督错误

因此,尝试在for循环的每次迭代后打印数组,您将看到索引在增加,但数组本身的长度在减少,这导致了这种行为

顺便说一句,接头工作正常。

您可以使用排序方法

常量arr=[0,0,0,0,1,0,1]; const newArr=arr.sorta,b=>b-a console.logarr您可以使用排序方法

常量arr=[0,0,0,0,1,0,1]; const newArr=arr.sorta,b=>b-a
console.logarr如果您发现不需要就地修改阵列。您可以创建要查找的阵列,如下所示:

常量数组=[0,0,0,0,1]; 常数moveZeroes=arr=>{ 常数0=0; const arraywhithoutzeros=array.filterx=>x!==zeros; const zerosRemovedCount=array.length-arrayWithoutZeros.length; const output=arrayWithoutZeros.concat …ArrayzerosRemovedCount.FillZeros ; console.logoutput; 返回输出; };
移动零阵列 如果您发现不需要在适当的位置修改阵列。您可以创建要查找的阵列,如下所示:

常量数组=[0,0,0,0,1]; 常数moveZeroes=arr=>{ 常数0=0; const arraywhithoutzeros=array.filterx=>x!==zeros; const zerosRemovedCount=array.length-arrayWithoutZeros.length; const output=arrayWithoutZeros.concat …ArrayzerosRemovedCount.FillZeros ; console.logoutput; 返回输出; };
移动零阵列 每次拼接阵列时,只需减小i的值

function moveZero(array){
    var numberofZeros = 0;
    for(var i=0; i< array.length; i++){
        if(array[i] == 0){
            array.splice(i,1);
            numberofZeros++;
            i--;
        }
    }
    while(numberofZeros > 0){
        array.push(0);
        numberofZeros--;
    }
}

为了优化这一点,我认为您可以使用Vaibhav回答的排序方法,您只需要在每次拼接阵列时减小I的值

function moveZero(array){
    var numberofZeros = 0;
    for(var i=0; i< array.length; i++){
        if(array[i] == 0){
            array.splice(i,1);
            numberofZeros++;
            i--;
        }
    }
    while(numberofZeros > 0){
        array.push(0);
        numberofZeros--;
    }
}

为了优化这一点,我认为您可以使用Vaibhav回答的排序方法,您可以在一次扫描中完成。拼接的成本更高,因为拼接后必须移动所有元素并调整阵列大小,而且每删除一个零,就必须移动一个元素。对于数组中的每个元素,此代码只需要1次写入操作

function moveZero(array){
    var numberofZeros = 0;
    for(var i=0; i< array.length; i++){
        if(array[i] == 0){
            array.splice(i,1);
            numberofZeros++;
            i--;
        }
    }
    while(numberofZeros > 0){
        array.push(0);
        numberofZeros--;
    }
}
常量数组=[1,0,2,0,3,0,4,0,5,0,6,0]; 常量moveZeroes=数组=>{ 设writeIndex=0; 对于let readIndex=0;readIndexconsole.logmoveZeroesarray 你可以一次扫完。拼接的成本更高,因为拼接后必须移动所有元素并调整阵列大小,而且每删除一个零,就必须移动一个元素。对于数组中的每个元素,此代码只需要1次写入操作

function moveZero(array){
    var numberofZeros = 0;
    for(var i=0; i< array.length; i++){
        if(array[i] == 0){
            array.splice(i,1);
            numberofZeros++;
            i--;
        }
    }
    while(numberofZeros > 0){
        array.push(0);
        numberofZeros--;
    }
}
常量数组=[1,0,2,0,3,0,4,0,5,0,6,0]; 常量moveZeroes=数组=>{ 设writeIndex=0; 对于let readIndex=0;readIndexconsole.logmoveZeroesarray;数组也可以有负元素。sort也可以为您这样做,而且效率更高。sorta,b=>Math.absb-Math.absaThe数组也可以有负元素。sort也可以为您这样做,效率更高。sorta,b=>Math.absb-Math.absahello,感谢您的回复。实际上,我只能在适当的位置对数组进行变异。我确实使用了过滤器,这使得这更容易;但不幸的是,我必须返回相同的传递数组。这很有意义。我还添加了一个就地解决方案。您好,谢谢您的回复。实际上,我只能在适当的位置对数组进行变异。我确实使用了过滤器,这使得这更容易;但不幸的是,我必须返回相同的传递数组。这很有意义。我还添加了一个就地解决方案。谢谢你,这与Vaibhav的建议一起帮助我可视化迭代。谢谢你,这与Vaibhav的建议一起帮助我可视化迭代。