Javascript 对象如何对添加到它的数字键进行排序

Javascript 对象如何对添加到它的数字键进行排序,javascript,arrays,performance,sorting,object,Javascript,Arrays,Performance,Sorting,Object,当我用object编码时,我想到我可以用object而不是sort prototype对这个数字数组进行排序。因为用object排序要快得多,只需将数组中的每个数字放入该对象中,然后将其转换回数组,在任何情况下都可以更快地排序O(2n)复杂度,而在排序数组中排序O(n) 让我困惑的是,当我们插入对象时,对象如何对其编号进行排序 所以我尝试创建一个未排序且重复的数组 //for random value test array let arr = []; const arrlen = 100000;

当我用object编码时,我想到我可以用object而不是sort prototype对这个数字数组进行排序。因为用object排序要快得多,只需将数组中的每个数字放入该对象中,然后将其转换回数组,在任何情况下都可以更快地排序O(2n)复杂度,而在排序数组中排序O(n)

让我困惑的是,当我们插入对象时,对象如何对其编号进行排序

所以我尝试创建一个未排序且重复的数组

//for random value test array
let arr = [];
const arrlen = 100000;
for(let i = 0 ; i < arrlen ; i++){
  arr.push( Math.floor(Math.random() * (1000 - 1) + 1))
}

不能对对象进行排序。对象不保留可靠的插入顺序。为了排序,请按如下方式对数组进行排序:字母排序:
array.sort()
['a','x','c'].sort((a,b)=>a>b?1:-1)
以获得更大的灵活性//数字排序:
array.sort((a,b)=>a-b)
我同意字母顺序,它不排序,但一个对象总是按数字排序。这与a类似,但通过利用对象上整数键的内部排序,它是无限的。它们本身需要对哈希映射键进行较大的分配或使用不同的排序算法。所以不,它不是
O(n)
,因为您忽略了对象枚举和/或属性访问的复杂性。@Bergi hi我刚才注意到我的排序与此计数排序非常相似,而prob确实是。仍然让我困惑的是,“对象枚举和/或属性访问”到底是如何工作的?
//using object sorting
const performance = window.performance;  
//start
const t0 = performance.now();
let sorted = true;
let prev = arr[0]
let obj = {}  
arr.forEach((val,index)=>{
    if(index > 0 && sorted){
        if(prev > val){
            sorted = false;
        }
        prev = val
    }
    (obj.hasOwnProperty(val))? obj[val] += 1 : obj[val] = 1
}) 
let sortobj = []
if(!sorted){
  for(key in obj){
    let len = obj[key]
    for(let i = 0; i < len; i++){
      sortobj.push(+key)
    }
  }
}
// using sort prototype
const tm0 = performance.now();
console.log(arr.sort((a,b)=>  a - b))
const tm1 = performance.now();
console.log("sort by sort prototype took " + (tm1 - tm0).toFixed(4) + " milliseconds.")