Moving Zeros To The End
问题:
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]
翻译(来自有道翻译):
编写一个算法,该算法接受一个数组并将所有的0移动到末尾,保留其他元素的顺序。
moveZeros([false,1,0,1,2,0,1,3,"a"]) // returns[false,1,1,2,1,3,"a",0,0]
个人解题代码:
//思路:定义一个记录数sum,for循环遍历arr
//当某一个元素全等于0时用splice()方法将其移除并使sum自增
//for循环sum次每次在arr后使用push()方法加0
var moveZeros = function (arr) {
var sum = 0;
for(var i = arr.length ; i >= 0 ; i--){
if(arr[i] === 0){
sum++;
arr.splice(i,1)
}
}
for(var i = 0 ; i < sum ; i++){
arr.push(0);
}
return arr
}
高亮回答:
var moveZeros = function (arr) {
return arr.filter(function(x) {return x !== 0}).concat(arr.filter(function(x) {return x === 0;}));
}