JavaScripts Object.keys() 顺序错乱解决方法

JavaScript Object.keys() 顺序错乱解决方法

当key 是整数时 会按从小到大排序 (字典默认排序方法)

当key是非整数 / 或字符串时 : 内部顺序按照key对象创建时间来排序

let dict = {
    
    
    'a' : '1',
    'b' : '1',
    'd' : '1'
}
Object.keys(dict) --->   ['a','b','c']
let dict = {
    
       
    1 : '1',  //按照字典默认会 从小到大 降序排序
    2 : '1',
    3 : '1'
}
Object.keys(dict) --->   [1,2,3]  //因为key是从小到大  所以排序一致

// ----------------------------------------------------------------

let dict = {
    
       
    3 : '1',  
    1 : '1',
    2 : '1'
}
Object.keys(dict) --->   [1,2,3]  //整数key 从小到大排序
#  当key是非整数 / 或字符串时 :  内部顺序按照key对象创建时间来排序   解释
let obj = {
    
    
   '3.1' :1,
   '1.1': 1,
   '2.1':1,
   '4.1':1
}
Object.keys(obj)                         --->  [3.1,1.1,2.1,4.1]  //不会排序     根据obj2 key的创建时间来排序   
Object.keys(Object.keys(obj2).sort())   ---->  [1.1,2.1,3.1,4.1]  //会排序      根据key 排序

排序流程(升降序)

        let obj4 = {
    
    
            3.13: "c",
            51.15: "e",
            2000.12: "b",
            41.14: "d",
            100.11: "a"
        };

        // 1. 获取字典对象的所有键
        let keys = Object.keys(obj4);


        // 2. 按照数值大小对键数组进行排序
        keys.sort((a, b) => a - b);


        // 3. 遍历排好序的键数组,创建一个新的有序字典对象
        let sortedObj = {
    
    };
        for (let key of keys) {
    
    
            sortedObj[key] = obj4[key];
        }

        //--------------------------------------
        let keys2 = Object.keys(obj4);
        keys2.sort((a, b) => b - a);
        let sortedObj2 = {
    
    };
        for (let key of keys2) {
    
    
            sortedObj2[key] = obj4[key];
        }
        //--------------------------------------
        console.log(obj4);
        console.log("降序", sortedObj);
        console.log("升序", sortedObj2);

完整示例

 console.log("------------2位小数---(单双引号效果一致)--------");
        let obj = {
    
    
            "3.13": "c",
            "5000.15": "e",
            "200.12": "b",
            "400.14": "d",
            '10000.11': "a"
        }
        console.log(obj);
        console.log("原key", Object.keys(obj));
        console.log("升序 key", Object.keys(obj).sort((a, b) => a - b));
        console.log("降序 key", Object.keys(obj).sort((a, b) => b - a));

        // 使用 自动排序后的键,取对应值,即可完成 k-v型排序(key为浮点数需要sort方法,为整数不需要sort方法)   
        console.log("------------排序结果-----降序----前3----");
        for (let x = 0; x < Object.keys(obj).sort((a, b) => b - a).length; x++) {
    
    
            if (x == 3) {
    
     break } // 控制取几个
            console.log(Object.keys(obj).sort((a, b) => b - a)[x] + "--------" + obj[Object.keys(obj).sort((a, b) => b - a)[x]]);
        }

        console.log("------------排序结果-----升序---前3-----");
        for (let x = 0; x < Object.keys(obj).sort((a, b) => a - b).length; x++) {
    
    
            if (x == 3) {
    
     break } // 控制取几个
            console.log(Object.keys(obj).sort((a, b) => a - b)[x] + "--------" + obj[Object.keys(obj).sort((a, b) => a - b)[x]]);
        }

示例

猜你喜欢

转载自blog.csdn.net/qq_46273065/article/details/129182939