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功能可以更短.有人可以提供更好的解决方案
这可以使用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)
正如评论中所要求的:那又怎么样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)