Moving Zeros To The End
链接
CodeWar-Moving Zeros To The End
题目
请写出一个算法,使得数组中的0移动到数组的最后,其他元素的顺序保持不变
moveZeros([false,1,0,1,2,0,1,3,"a"]) // returns[false,1,1,2,1,3,"a",0,0]
我的思路及实现
var moveZeros = function (arr) {
for (var i = 0; i < arr.length; i++) {
if (arr[i] === 0) {
for (var j = i + 1; j < arr.length; j++) {
if (arr[j] !== 0) {
arr[i] = arr[j];
arr[j] = 0;
break;
}
}
}
}
return arr;
}
这里判断是否为0的时候用的是“===”以及“!==”,因为false == 0是true。
Best Practice
大佬们的思路是把非0的数组和为0的数组拼在一起,而我是做了排序
var moveZeros = function (arr) {
return arr.filter(function(x) {return x !== 0}).concat(arr.filter(function(x) {return x === 0;}));
}
var moveZeros = function (arr) {
return arr.reduceRight(function(prev, curr) {
if (curr !== 0) {
prev.unshift(curr);
}
else {
prev.push(curr);
}
return prev;
}, []);
}