我需要按关键字对JavaScript对象进行排序。

因此如下:

{ 'b' : 'asdsad', 'c' : 'masdas', 'a' : 'dsfdsfsdf' }

将变成:

{ 'a' : 'dsfdsfsdf', 'b' : 'asdsad', 'c' : 'masdas' }

当前回答

function sortObjectKeys(obj){
    return Object.keys(obj).sort().reduce((acc,key)=>{
        acc[key]=obj[key];
        return acc;
    },{});
}

sortObjectKeys({
    telephone: '069911234124',
    name: 'Lola',
    access: true,
});

其他回答

这个问题的其他答案是过时的,从未与实现现实相匹配,并且在ES6/ES2015规范发布后正式变得不正确。


请参阅Axel Rauschmayer在《探索ES6》中关于属性迭代顺序的章节:

所有迭代属性键的方法都以相同的顺序执行:首先是数组索引,按数字排序。然后按创建顺序列出所有字符串键(不是索引)。然后是所有符号,按照它们的创建顺序。

是的,JavaScript对象实际上是有序的,它们的键/财产的顺序可以更改。

以下是如何按关键字/财产按字母顺序对对象进行排序:

常量无序={'b':'foo',“c”:“bar”,“a”:“baz”};console.log(JSON.stringify(无序));// → '{“b”:“foo”,“c”:“bar”,“a”:“baz”}'const ordered=Object.keys(无序).sort().reduce((obj,key)=>{obj[key]=无序[key];返回obj;}, {});console.log(JSON.stringify(有序));// → '{“a”:“baz”,“b”:“foo”,“c”:“bar”}'

为了与ES5引擎兼容,请使用var而不是const。

不确定这是否能回答问题,但这正是我需要的。

Maps.iterate.sorted = function (o, callback) {
    var keys = Object.keys(o), sorted = keys.sort(), k; 
    if ( callback ) {
            var i = -1;
            while( ++i < sorted.length ) {
                    callback(k = sorted[i], o[k] );
            }
    }

    return sorted;
}

调用为:

Maps.iterate.sorted({c:1, b:2, a:100}, function(k, v) { ... } ) 

使用lodash可以:

some_map = { 'b' : 'asdsad', 'c' : 'masdas', 'a' : 'dsfdsfsdf' }

// perform a function in order of ascending key
_(some_map).keys().sort().each(function (key) {
  var value = some_map[key];
  // do something
});

// or alternatively to build a sorted list
sorted_list = _(some_map).keys().sort().map(function (key) {
  var value = some_map[key];
  // return something that shall become an item in the sorted list
}).value();

只是思考的食物。

const sortObjectByKeys=(对象,asc=true)=>object.fromEntries(Object.entries(Object).sort(([k1],[k2])=>k1<k2^!阿斯克-1 : 1),)常量对象={b:“asdsad”,c:“masdas”,a:“dsfdsfsdf”}const orderedObject=sortObjectByKeys(对象)console.log(orderedObject)

截至2023年1月

变量obj={'b':'Val',“a”:“Val”,'c':'bVal'}console.log(JSON.stringify(obj))obj=Object.fromEntries(Object.entries(obj).sort())console.log(JSON.stringify(obj));