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