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

因此如下:

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

将变成:

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

当前回答

递归排序,用于嵌套对象和数组

function sortObjectKeys(obj){
    return Object.keys(obj).sort().reduce((acc,key)=>{
        if (Array.isArray(obj[key])){
            acc[key]=obj[key].map(sortObjectKeys);
        }
        if (typeof obj[key] === 'object'){
            acc[key]=sortObjectKeys(obj[key]);
        }
        else{
            acc[key]=obj[key];
        }
        return acc;
    },{});
}

// test it
sortObjectKeys({
    telephone: '069911234124',
    name: 'Lola',
    access: true,
    cars: [
        {name: 'Family', brand: 'Volvo', cc:1600},
        {
            name: 'City', brand: 'VW', cc:1200, 
            interior: {
                wheel: 'plastic',
                radio: 'blaupunkt'
            }
        },
        {
            cc:2600, name: 'Killer', brand: 'Plymouth',
            interior: {
                wheel: 'wooden',
                radio: 'earache!'
            }
        },
    ]
});

其他回答

现在是2019年,我们有一个2019年的方法来解决这个问题:)

Object.fromEntries(Object.entries({b: 3, a:8, c:1}).sort())

这里有一个单行解决方案(不是最有效的,但当涉及到像您的示例中那样的瘦对象时,我宁愿使用本机JS函数,也不要使用草率的循环)

const无序={“b”:“asdsad”,“c”:“masdas”,“a”:“dsfdsfsdf”}const ordered=Object.fromEntries(Object.entries(无序).sort())console.log(已订购);//a->b->c

JavaScript对象1未排序。试图对它们进行“排序”是没有意义的。如果要迭代对象的财产,可以对键进行排序,然后检索关联的值:

变量myObj={“b”:“asdsadfd”,“c”:“masdasaf”,“a”:“dsfdsfsdf”},键=[],k、 i,len;for(myObj中的k){如果(myObj.hasOwnProperty(k)){按键.按键(k);}}keys.sort();len=按键长度;对于(i=0;i<len;i++){k=键[i];console.log(k+':'+myObj[k]);}


使用Object.keys幻想的替代实现:

变量myObj={“b”:“asdsadfd”,“c”:“masdasaf”,“a”:“dsfdsfsdf”},keys=对象键(myObj),i、 len=按键长度;keys.sort();对于(i=0;i<len;i++){k=键[i];console.log(k+':'+myObj[k]);}


1不要迂腐,但没有JSON对象。

也许更优雅的形式:

/***按键对键值对象排序,保持键到数据的相关性。*@param{Object}src键值对象*@return{Object}*/var ksort=函数(src){var keys=对象.keys(src),目标={};keys.sort();key.forEach(功能(键){target[key]=src[key];});回归目标;};//用途console.log(ksort({a: 1中,c: 3中,b: 2个}));

P.S.和ES6+语法相同:

function ksort( src ) {
  const keys = Object.keys( src );
  keys.sort();
  return keys.reduce(( target, key ) => {
        target[ key ] = src[ key ];
        return target;
  }, {});
};

这对我有用

/**
 * Return an Object sorted by it's Key
 */
var sortObjectByKey = function(obj){
    var keys = [];
    var sorted_obj = {};

    for(var key in obj){
        if(obj.hasOwnProperty(key)){
            keys.push(key);
        }
    }

    // sort keys
    keys.sort();

    // create new array based on Sorted Keys
    jQuery.each(keys, function(i, key){
        sorted_obj[key] = obj[key];
    });

    return sorted_obj;
};