Javascript 使用ES6功能在阵列中移动零

Javascript 使用ES6功能在阵列中移动零,javascript,ecmascript-6,Javascript,Ecmascript 6,我是ES6新手,尝试创建一个函数,将数组中的所有零移动到数组的最后一个位置,同时保留数组的原始顺序 例如[1,0,0,2,3,4,5]=>[1,2,3,4,5,0,0,0] function moveZeros (arr) { let zeroArr = []; for(let i = 0;i < arr.length;i++) { if (arr[i] == 0) { zeroArr.push(arr[i]); arr.splice(i, 1);

我是ES6新手,尝试创建一个函数,将数组中的所有零移动到数组的最后一个位置,同时保留数组的原始顺序 例如
[1,0,0,2,3,4,5]
=>
[1,2,3,4,5,0,0,0]

 function moveZeros (arr) {
  let zeroArr = [];
    for(let i = 0;i < arr.length;i++) {
    if (arr[i] == 0) {
     zeroArr.push(arr[i]);
     arr.splice(i, 1);
    }
  }
  arr.push(...zeroArr);
  return arr;
} 
函数移动零点(arr){
设zeroArr=[];
for(设i=0;i

这是我的代码,它工作得很好,但我认为在使用一些ES6特性时,它可以更短。是否有人能提供一个更好的解决方案

,该解决方案可以使用
过滤器
功能和
扩展
操作符轻松解决

const moveZeros = arr => {
  const z = arr.filter(a => a === 0); // get all zeroes
  const nZ = arr.filter(a => a !== 0); // get all non zeroes
  return [...nZ, ...z]; // put the zeroes on the last position
};

您可以使用
reduceRight
,如果元素为0,则使用
push
,如果元素不是0,则使用
unshift

const arr=[1,0,0,0,2,3,4,5];
常数res=arr.reduceRight((r,e)=>(e==0?r.push(e):r.unshift(e,r),[]))

console.log(res)
按照注释中的要求:排序如何

arr.sort((a, b) => -!b)
当然,它的性能要差一些,但它要短一些

旧的

Onecompileman得到了一个不错的解决方案,但由于OP需要“更短”的解决方案,我认为我们可以减少一些不必要的部分:

const moveZeros = a => [...a.filter(x => !!x), ...a.filter(x => !x)]

@lucifer63给出了一个简短而好的解决方案,但
双不运算符既无用又令人困惑,删除它您将得到改进:

const moveZeros=z=>[…z.filter(a=>a),…z.filter(a=>!a)]
移动零([1,0,0,2,3,4,5])

//[1,2,3,4,5,0,0,0]
您可以通过在实际位置或调整后的索引处拼接结果数组(计算非空值)来减少数组

函数移动零(数组){
返回数组.reduce((i=>(r,v,j)=>(r.splice(!v?j:i++,0,v),r))(0),[]);
}

log(移动零([1,0,0,0,2,3,4,5])嗯。那么常规排序呢?…不知何故,我认为从一开始就明确表示我们希望我们的值是布尔值会更准确,但是是的,你是对的,它在没有
double not