JavaScript 中的數組去重和排序

排序

Sort方法

在JavaScript中,數組Array本身有具有Sort方法可以對數組的元素進行排序,并返回數組。Sort排序默認根據字符串的Unicode碼點進行排序。

var scores = [1,10,2,4,21]
scores.sort() // [1, 10, 2, 21, 4]

Sort方法可以接受一個函數compareFunction 作為參數,如果沒有指明compareFunction,那么元素會按照轉換為的字符串的Unicode位點進行排序;比較時數字會被先轉為字符串。

如果指明了compareFunction,那么數組會按照調用該函數的返回值進行排序,即 a和b 是兩個要被比較的元素

  • 如果compareFunction(a,b)小于0,那么a會被排列在b之前;
  • 如果compareFunction(a,b)等于0,那么a和b的位置不變。
  • 如果compareFunction(a,b)大于0,那么b在a之前。
function compareFunction(a,b){
  if(a>b){
    return 1
  }
  if(a<b) {
    return -1
  }
  return 0
}

如果只是簡單的Number進行排序,那么可以寫成

function compFun(a,b) {
  return a-b
}

在函數Sort內部,各家實現各不相同,目前了解到最多的應該是使用的快排。

去重

Javascript本身并沒有對數組的原型方法。

對數組去重進行簡單的總結。

  1. 通過ES6方法去重

    var arr = [1,2,4,2,2,1,5,2,1,9]
    var newarr = [...new Set(arr)]
    
  2. indexOf

    通過數組的indexof方法對數組元素進行去重。

    function unique(arr) {
      var newarr = []
      for(let i =0;i<arr.length;i++) {
        if(newarr.indexOf(arr[i])=== -1) {
          newarr.push(arr[i])
        }
      }
      return newarr
    }
    
  3. hash去重

    function unique(arr) {
     var newarr = []
     var obj = {}
     for(let i=0;i<arr.length;i++){
       if(obj[arr[i]] !== 1) {
         newarr.push(arr[i])
         obj[arr[i]] = 1
       }
     }
     return newarr
    }
    

    ?

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Javascript有很多數組的方法,有的人有W3C的API,還可以去MDN上去找,但是我覺得API上說的不全,M...
    頑皮的雪狐七七閱讀 4,180評論 0 6
  • 一、數組方法里push、pop、shift、unshift、join、split分別是什么作用。 (1).arr....
    饑人谷區子銘閱讀 548評論 0 3
  • 一直很喜歡余周周的故事,溫暖,單純,過程雖然有點曲折,期間也有些許遺憾,但最終卻算得上是Happy Endin...
    浮生半世w閱讀 281評論 0 0
  • 我有看大家交的的作業好像都是關于工作方面的內容,我呢想對自己最近的生活狀態來一次復盤,在我這一次作業前,我剛剛把寄...
    ac625cc11203閱讀 248評論 0 0
  • 導語 正則表達式的作用: 測試字符串內的模式 替換文本 基于模式匹配從字符串中提取子字符串 語法 正則表達式的各組...
    zydsb閱讀 302評論 0 0