数组移动所有的0到末尾

链接:Moving Zeros To The End | Codewars

例子:

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

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
function moveZeros(arr){
let arrA=[]
let arrB=[]
arr.forEach(function(value, index){
if(value===0){
arrB.push(0)
}
else{
arrA.push(value)
}
})
let newArr = arrA.concat(arrB)
return newArr
}
console.log(moveZeros(["a",0,"b","c","d",1,1,3,1,9,0,0,9,0,0,0,0,0,0,0]))
其他人的例子:

// 用concat连接两次筛选得到的数组
var moveZeros = function (arr) {
return arr.filter(function(x) {return x !== 0}).concat(arr.filter(function(x) {return x === 0;}));
}

// 用concat连接两次筛选得到的数组
var moveZeros = function (arr) {
var filtedList = arr.filter(function (num){return num !== 0;});
var zeroList = arr.filter(function (num){return num === 0;});
return filtedList.concat(zeroList);
}

// 用concat连接两次筛选得到的数组
var moveZeros = function (arr) {
return arr
.filter((val) => val !== 0)
.concat(arr.filter((val) => val === 0));
}

// 从数组的最后一个元素开始判断,这样就不会出错。不要从头开始。
var moveZeros = function (arr) {
for(var i = arr.length - 1; i >= 0; i--) {
if(arr[i] === 0) {
arr.splice(i, 1);
arr.push(0);
}
}
return arr;
}

// ES6的剩余参数 ...
// ... 可以把数组变为字符串
var moveZeros = function (arr) {
return [
...(arr.filter(n => n !== 0)),
...(arr.filter(n => n === 0))
];
}

// 要先reverse()
var moveZeros = function (arr) {
return arr.reverse().reduce(function(ret,v){
return v === 0 ? ret.push(v) : ret.unshift(v), ret;
},[]);
}
Contents
|