JS - Object 數字 key 的順序


Object 的 key 是排過序的,但這個 Object 的 key 的排序和數組下標不同是有限制的,我在 Node.js(Chrome V8 引擎)測試 Object 的 key 只有在小於2^32 - 1時才會排序。

要保證 Object 的 key 的順序的話可以先獲取可枚舉屬性然后排序,參見:Object.entries() - JavaScript | MDN

其實數組下標也是 Key(連續的整數名的的可枚舉屬性,未設置的 Value 為undefined),所以使用 for...in 遍歷數組一是不能保證順序,二是會遍歷非整數名的可枚舉屬性。參見:for...in - JavaScript | MDN

例,使用 Node.js(Chrome V8 引擎)測試 Object 的 key 只有在小於2^32 - 1時才會排序:

let obj = {
  // unnormal order (not sorted) (>= 2^32 - 1)
  "4294967296": true,
  "4294967295": true,
  "4294967299": true,
  "4294967298": true,
  // normal order (sorted) (< 2^32 - 1)
  "4294967294": true,
  "4294967293": true,
  "1": true,
  "2": true,
  "3": true
};

console.log(Object.keys(obj).join(", ")); // 和 for...in 順序一樣
/*
   	排序不正常:
	1, 2, 3, 4294967293, 4294967294, 4294967296, 4294967295, 4294967299, 4294967298
   */

console.log(
  Object.keys(obj)
    .sort((a, b) => {
      return a - b;
    })
    .join(", ")
);
/*
    排序正常:
	1, 2, 3, 4294967293, 4294967294, 4294967295, 4294967296, 4294967298, 4294967299
   */


免責聲明!

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



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