1. 程式人生 > 其它 >For..in...和Object.keys之後的輸出順序

For..in...和Object.keys之後的輸出順序

  在做Excel表格讀取資料的時候,需要將資料轉換為陣列,因為不知道for..in ..的遍歷會有自動排序的作用,所以程式碼看得挺蒙的。

  

  經查資料,for..in..的object型別的輸出按如下規律:

  1. 如果是純數字的話,會按數字排序後按照數字順序輸出;
  2. 包含正數和其他的object的鍵,會按照正數順序先排列輸出,再輸出其他項;
  3. 包含負數,-號識別為字元。

  

  後面看到了有Object.keys的資料轉換,查了一下,這個也會對object進行鍵排序:

  (參考:https://zhuanlan.zhihu.com/p/40601459,寫得很好)

  總結的情況:

  1. 宣告變數keys值為一個空列表(List型別)
  2. 把每個Number型別的屬性,按數值大小升序排序,並依次新增到keys中
  3. 把每個String型別的屬性,按建立時間升序排序,並依次新增到keys中
  4. 把每個Symbol型別的屬性,按建立時間升序排序,並依次新增到keys中
  5. 將keys返回(return keys)

   上面這個規則不光規定了不同型別的返回順序,還規定了如果物件的屬性型別是數字,字元與Symbol混合的,那麼返回順序永遠是數字在前,然後是字串,最後是Symbol

   文章舉的例子:

Object.keys({
  5: '5',
  a: 'a',
  1: '1',
  c: 'c',
  3: '3',
  b: 'b'
})
// ["1", "3", "5", "a", "c", "b"]

  排序規則同樣適用於下列API:

    • Object.entries
    • Object.values
    • for...in迴圈
    • Object.getOwnPropertyNames
    • Reflect.ownKeys