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;
  }, []);
}