Object.keys() 實現數組排序

今天學習時,忽然想到一種新方法給數組排序,特此記錄下來。算法

直接上代碼:數組

const arr = [3, 4, 6, 7, 10, 2];
const obj = {};
arr.forEach(value => obj[value] = value);
const objKey = Object.keys(obj);
const arrUp = objKey.map(value => parseInt(value));
複製代碼

代碼中,arr 是待排序數組,arrUp 是 arr 的升序數組,arrDown 是 arr 的降序數組,代碼思路很簡單,由於 Object.keys() 遍歷對象屬性時,首先遍歷全部數值鍵,按照數值升序排列,因此將 arr 中的數值做爲 obj 的屬性,當執行 Object.keys(obj) 時,返回一個 '升序' 數組,可是這個數組中的成員都是字符串,因此最後用 parseInt 將字符串轉爲數字,就獲得了 arr 的升序數組 arrUp。bash

代碼驗證: 學習

代碼驗證

那麼用 Object.keys() 來實現數組排序,有意義嗎?其實沒意義,用 Object.keys() 來實現數組排序不涉及算法,不涉及算法的話,用數組的 sort 方法更簡潔。spa

重要的是,知道 for...in、Object.keys(obj)、Object.getOwnPropertyNames(obj)、Object.getOwnPropertySymbols(obj)、Reflect.ownKeys(obj),這 5 種方法遍歷對象的鍵名,都遵照一樣的屬性遍歷的次序規則:code

  1. 首先遍歷全部數值鍵,按照數值升序排列。
  2. 其次遍歷全部字符串鍵,按照加入時間升序排列。
  3. 最後遍歷全部 Symbol 鍵,按照加入時間升序排列。
相關文章
相關標籤/搜索