Object.entries(),为什么我的数组默认以数字排序



我在编写一个简单的代码练习解决方案时,遇到了一个似乎是object.entries()在进行内部数字升序排序的问题。我本以为必须自己对键值对进行排序,因为文档说如果需要特定的顺序,就必须进行排序。为什么会发生这种情况,我能依靠这种行为吗?

/*
Given an input of [1,2,4,591,392,391,2,5,10,2,1,1,1,20,20], 
make a function that organizes these into individual array that is ordered. 
The above input should return:
[[1,1,1,1],[2,2,2],4,5,10,[20,20],391,392,591].
*/
const cleanTheRoom = (mess) => { 
let hash = {};
for (let i = 0; i < mess.length; i++) {
(hash.hasOwnProperty(mess[i])) ? hash[mess[i]]++ : hash[mess[i]] = 1;
}
const clean = [];
for (const [key, value] of Object.entries(hash)) {
(value > 1) ? clean.push(Array(value).fill(key)) : clean.push(key);
}
return clean;
}
let cleaned = cleanTheRoom(
[1,2,4,591,392,391,2,5,10,2,1,1,1,20,20]
);
console.log(cleaned);

Object.entries使用规范操作EnumerableOwnPropertyKeys,该操作反过来使用对象的[[OwnPropertyKeys],对于大多数对象(包括数组(,该操作是OrdinaryOwnPropertyKey。该操作特别适用于看起来像数组索引的特殊情况下的属性名称,并按数字顺序列出它们。算法是:

  1. 让键成为一个新的空列表
  2. 对于O的每个属性键P,使得P是一个数组索引,按升序数字索引,执行
    1. 添加P作为键的最后一个元素
  3. 对于O的每个属性键P,使得Type(P(是String,而P不是数组索引,按照属性创建的升序,添加P作为键的最后一个元素
  • 对于O的每个属性键P,使得Type(P(是Symbol,按照属性创建的升序,执行
    1. 添加P作为键的最后一个元素
  • 归还钥匙
  • 这是因为Object在JavaScript上用作哈希,在任何实现中,哈希都不应该用于存储插入顺序值。

    Object.entries背后的主要用途是当您想要检索特定Object的键/值时,而不需要键或值的特定顺序。

    最新更新