为了账号安全,请及时绑定邮箱和手机立即绑定

按键排序JavaScript对象

按键排序JavaScript对象

按键排序JavaScript对象我需要按键对JavaScript对象进行排序。因此,应采取以下措施:{ 'b' : 'asdsad', 'c' : 'masdas', 'a' : 'dsfdsfsdf' }将成为:{ 'a' : 'dsfdsfsdf', 'b' : 'asdsad', 'c' : 'masdas' }
查看完整描述

3 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

对这个问题的其他回答是过时的,永远无法与实现现实相匹配,而且正式既然ES6/ES 2015规范已经发布,就会变得不正确。


看见关于性质迭代顺序在……里面探索ES6作者:Axel Rauschmayer:

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

  1. 首先,所有数组索引,数字排序。
  2. 然后按照创建的顺序,所有字符串键(不是索引)。
  3. 然后所有的符号,按照它们被创造的顺序。

是的,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引擎兼容。


查看完整回答
反对 回复 2019-05-30
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

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];

  console.log(k + ':' + myObj[k]);

}

交替实现Object.keys幻想:


var myObj = {

    'b': 'asdsadfd',

    'c': 'masdasaf',

    'a': 'dsfdsfsdf'

  },

  keys = Object.keys(myObj),

  i, len = keys.length;


keys.sort();


for (i = 0; i < len; i++) {

  k = keys[i];

  console.log(k + ':' + myObj[k]);

}


查看完整回答
反对 回复 2019-05-30
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

很多人都提到“对象不能排序”但在那之后,他们给了你一个可行的解决方案。矛盾,不是吗?

没有人提到为什么这些解决办法是有效的。它们是这样的,因为在大多数浏览器的实现中,对象中的值都是按照添加的顺序存储的。这就是为什么如果您从已排序的键列表中创建新对象,它将返回预期的结果。

我认为我们还可以增加一个解决方案-ES5功能方法:

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

以上版本(格式为“一行”):

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

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

Object.keys在提供的对象中给出一个键列表(objo),然后我们使用默认排序算法对这些数据进行排序,下一步是.reduce用于将该数组转换回对象,但这次使用的是所有的键排序。


查看完整回答
反对 回复 2019-05-30
  • 3 回答
  • 0 关注
  • 834 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信