1、問題描述:數組
將0移到最後,在原數組操做,而且不能改變源數據順序。函數
示例:輸入:[2,0,0,1,0,3], 結果:[2,1,3,0,0,0]spa
2、問題分析與解決:prototype
注意是在原數組上操做,不要進行任何數組拷貝操做,還要保證操做後的源數據順序不變。code
直接上JS代碼:blog
//ES6箭頭函數寫法 const moveZero = (arr) => { let y = 0;//定義y用於控制循環結束 for (let i = 0; y < arr.length; y++) { if (arr[i] === 0) arr.push(arr.splice(i, 1)[0]);//循環到是0的位置就刪除該元素0而且在arr末尾push進這個元素0,因爲splice刪除了該位置元素,因此i不用+1,下次循環仍然檢查i位置的元素 else i++;//循環到不是0的位置就繼續日後循環 } return arr;//返回操做後的原數組 }; //運行以下: moveZero([2,0,0,1,0,3]);//[2,1,3,0,0,0]
注: 細節之處體現差異,Array.prototype.splice(startIndex, counts, addElement)方法的做用和三個參數的含義盡人皆知。可是不多有人關心它的返回值,splice的返回值是原數組中被刪除的元素組成的數組,如[1,2,3].splice(1,2)返回被刪除的元素數組[2,3],利用這一點能夠將代碼簡化,即arr.push(arr.splice(i, 1)[0]),直接將刪除後的元素push進原數組。順便提一下push方法返回的是push操做以後,原數組的length屬性,如[].push(1,2,3)返回數字3,即push後數組[1,2,3]的length爲3.get
若有疑問歡迎留言討論,謝謝!博客
(本文爲原創博客,嚴禁非法抄襲或複製,轉載請註明出處:https://www.cnblogs.com/xiao-pengyou/)it