將0移到最后,在原數組操作,並且不能改變源數據順序(JS編程)


一、問題描述:

將0移到最后,在原數組操作,並且不能改變源數據順序。

示例:輸入:[2,0,0,1,0,3],  結果:[2,1,3,0,0,0]

 

二、問題分析與解決:

注意是在原數組上操作,不要進行任何數組拷貝操作,還要保證操作后的源數據順序不變。

直接上JS代碼:

//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.

 

如有疑問歡迎留言討論,謝謝!

(本文為原創博客,嚴禁非法抄襲或復制,轉載請注明出處:https://www.cnblogs.com/xiao-pengyou/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM