为什么Object.keys(data).sort()无法按预期工作?

时间:2016-04-30 04:40:04

标签: javascript jquery

我正在尝试对对象键进行排序。

但是当我打印我的对象时,它总是首先打印bb。有谁能解释一下?

应先打印aa吗?我已经把钥匙分类了。

我的第一个密钥应为aa,然后第二个密钥应为bb

这是我的代码

var data = {
    bb:"bb",
    aa:"cc"
};
Object
    .keys(data)
    .sort();
console.log(data)

DEMO

3 个答案:

答案 0 :(得分:3)

两件事:

    JS中的
  • 对象没有元素的顺序,比如数组
  • Object.keys返回一个对象键数组,它不会修改对象本身,请参阅以下示例:

var data={bb:"bb",aa:"cc"};
var arr = Object.keys(data);
arr.sort();
console.log(arr); // the array IS modified, 
                  // but it has nothing to do with the original object

答案 1 :(得分:0)

试试这个

var data={bb:"bb",aa:"cc"};
var keys = Object.keys(data);
keys.sort();

var obj = {};
for(i = 0; i < keys.length; i++){
  obj[keys[i]] = data[keys[i]];
}

console.log(obj);

答案 2 :(得分:0)

没有任何方法可以在JavaScript中对对象键进行排序,但是可以通过这样的对象原型来实现。

Object.prototype.sortKeys = function () {
        var sorted = {},
        key, a = [];
    
        for (key in this) {
            if (this.hasOwnProperty(key)) {
                a.push(key);
            }
        }
    
        a.sort();
    
        for (key = 0; key < a.length; key++) {
            sorted[a[key]] = this[a[key]];
        }
        return sorted;
    }

    var data = {bb: "bb", aa :"cc"};
    
    alert(JSON.stringify(data.sortKeys())); // Returns sorted object data by their keys