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

she*_*hen 4 javascript ecmascript-6

我是ES6的新手,尝试创建一个函数,在数组的最后位置移动数组中的所有零,同时保留数组的原始顺序Eg [1,0,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;
} 
Run Code Online (Sandbox Code Playgroud)

这是我的代码,它的工作正常,但我认为使用一些ES6功能可以更短.有人可以提供更好的解决方案

one*_*man 8

这可以使用filter函数和spread运算符轻松解决.

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
};
Run Code Online (Sandbox Code Playgroud)


luc*_*r63 5

正如评论中所要求的:那又怎么样sort

arr.sort((a, b) => -!b)
Run Code Online (Sandbox Code Playgroud)

它的性能肯定较差,但更短

老的

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

const moveZeros = a => [...a.filter(x => !!x), ...a.filter(x => !x)]
Run Code Online (Sandbox Code Playgroud)