# Daily Codewars #24

# Question

codewars link (opens new window) Write an algorithm that takes an array and moves all of the zeros to the end, preserving the order of the other elements.

moveZeros([false,1,0,1,2,0,1,3,"a"]) // returns[false,1,1,2,1,3,"a",0,0]

# My Solution

//success code
var moveZeros = function (arr) {
  for(var i = arr.length; i--;) {
      if(arr[i] === 0) {
          arr.splice(i, 1);
          arr.push(0);
      }
  }
  return arr;
}
//error code
  arr.map(function(item, i) {
    if(item===0){
        arr.splice(i, 1);
        arr.push(0);
    }
  });

처음에는 두번째 코드처럼 map으로 짰다. 하지만 이는 배열에서 0을 삭제할때마다 index가 꼬이는 문제가 있어서 간단한 for loop를 돌렸다.

# @jakber's Solution

var moveZeros = function (arr) {
  return arr.filter(function(x) {return x !== 0}).concat(arr.filter(function(x) {return x === 0;}));
}

이야아... filter로 0이 아닌것과 0인걸 나누어서 concat했다.