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

因此如下:

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

将变成:

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

当前回答

Object.keys(unordered).sort().reduce(
    (acc,curr) => ({...acc, [curr]:unordered[curr]})
    , {}
)

其他回答

这是一个老问题,但从Mathias Bynens的回答中得到启示,我制作了一个简短的版本来对当前对象进行排序,而没有太多开销。

    Object.keys(unordered).sort().forEach(function(key) {
        var value = unordered[key];
        delete unordered[key];
        unordered[key] = value;
    });

代码执行后,“无序”对象本身将按字母顺序对键进行排序。

只是为了简化它,让它更清晰,马特·鲍尔的答案

//您的对象变量myObj={b:'asdsadfd',c:“masdasaf”,a:'dsfdsfsdf'};//固定代码var键=[];for(myObj中的var k){如果(myObj.hasOwnProperty(k)){按键.按键(k);}}keys.sort();对于(var i=0;i<keys.length;i++){k=键[i];警报(k+':'+myObj[k]);}

最好的方法是

 const object =  Object.keys(o).sort().reduce((r, k) => (r[k] = o[k], r), {})

 //else if its in reverse just do 

 const object = Object.keys(0).reverse ()

您可以首先将几乎类似数组的对象转换为实际数组,然后使用.reverse():

Object.assign([], {1:'banana', 2:'apple', 
3:'orange'}).reverse();
// [ "orange", "apple", "banana", <1 empty slot> ]

结尾处的空槽if cause,因为第一个索引是1而不是0。可以使用.length--或.pop()删除空槽。

或者,如果您想借用.reverse并在同一个对象上调用它,它必须是一个完全类似数组的对象。也就是说,它需要长度属性:

Array.prototype.reverse.call({1:'banana', 2:'apple', 
3:'orange', length:4});
// {0:"orange", 1:"apple", 3:"banana", length:4}

注意,它将返回同一个完全类似数组的对象对象,因此它不是一个真正的数组。然后可以使用delete删除长度属性。

Object.keys(unordered).sort().reduce(
    (acc,curr) => ({...acc, [curr]:unordered[curr]})
    , {}
)

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)