按键排序JavaScript对象

我需要按键排序JavaScript对象。

因此如下:

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

会成为:

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

对于这个问题的其他答案已经过时,从未匹配实现的实际情况,并且现在ES6 / ES2015规范已经发布,并且已经正式变得不正确。


Axel Rauschmayer在Exploring ES6中查看属性迭代顺序部分:

迭代属性键的所有方法都按照相同的顺序进行:

  • 首先是所有数组索引,按数字排序。
  • 然后按照创建顺序排列所有字符串键(不是索引)。
  • 然后所有符号按照它们的创建顺序排列。
  • 所以,是的,JavaScript对象其实都是有序的,而且它们的键/属性的顺序是可以改变的。

    以下是如何按字母顺序排序对象的按键/属性:

    const unordered = {
      'b': 'foo',
      'c': 'bar',
      'a': 'baz'
    };
    
    console.log(JSON.stringify(unordered));
    // → '{"b":"foo","c":"bar","a":"baz"}'
    
    const ordered = {};
    Object.keys(unordered).sort().forEach(function(key) {
      ordered[key] = unordered[key];
    });
    
    console.log(JSON.stringify(ordered));
    // → '{"a":"baz","b":"foo","c":"bar"}'
    

    使用var而不是const来与ES5引擎兼容。


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

    var myObj = {
        'b': 'asdsadfd',
        'c': 'masdasaf',
        'a': 'dsfdsfsdf'
      },
      keys = [],
      k, i, len;
    
    for (k in myObj) {
      if (myObj.hasOwnProperty(k)) {
        keys.push(k);
      }
    }
    
    keys.sort();
    
    len = keys.length;
    
    for (i = 0; i < len; i++) {
      k = keys[i];
      alert(k + ':' + myObj[k]);
    }

    很多人都提到“物体不能被分类” ,但是之后他们会给你一个解决方案。 悖论,不是吗?

    没有人提到这些解决方案为什么起作用。 它们是,因为在浏览器的大部分实现中,对象中的值都是按照它们的添加顺序存储的。 这就是为什么如果你从有序键列表中创建新的对象,它会返回一个预期的结果。

    我认为我们可以添加一个解决方案 - ES5的功能方式:

    function sortObject(obj) {
        return Object.keys(obj).sort().reduce(function (result, key) {
            result[key] = obj[key];
            return result;
        }, {});
    }
    

    上述ES2015版本(格式化为“单行”):

    function sortObject(o) {
        return Object.keys(o).sort().reduce((r, k) => (r[k] = o[k], r), {});
    }
    

    上述例子的简短解释(如评论中所述):

    Object.keys向我们提供了提供的对象( objo )中的键列表,然后我们使用默认的排序算法对它们进行排序,接下来.reduce用于将该数组转换回对象,但是这次是全部按键排序。

    链接地址: http://www.djcxy.com/p/91755.html

    上一篇: Sort JavaScript object by key

    下一篇: Does python support enumerated types?