猿问

按键排序JavaScript对象

按键排序JavaScript对象

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

因此,应采取以下措施:

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

将成为:

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


料青山看我应如是
浏览 828回答 3
3回答

红颜莎娜

对这个问题的其他回答是过时的,永远无法与实现现实相匹配,而且正式既然ES6/ES 2015规范已经发布,就会变得不正确。看见关于性质迭代顺序在……里面探索ES6作者:Axel Rauschmayer:对属性键进行迭代的所有方法都是按照相同的顺序进行的:首先,所有数组索引,数字排序。然后按照创建的顺序,所有字符串键(不是索引)。然后所有的符号,按照它们被创造的顺序。是的,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引擎兼容。

慕田峪9158850

JavaScript对象1没有命令。尝试“整理”它们是毫无意义的。如果要迭代对象的属性,可以对键进行排序,然后检索相关的值:var myObj = {&nbsp; &nbsp; 'b': 'asdsadfd',&nbsp; &nbsp; 'c': 'masdasaf',&nbsp; &nbsp; 'a': 'dsfdsfsdf'&nbsp; },&nbsp; keys = [],&nbsp; k, i, len;for (k in myObj) {&nbsp; if (myObj.hasOwnProperty(k)) {&nbsp; &nbsp; keys.push(k);&nbsp; }}keys.sort();len = keys.length;for (i = 0; i < len; i++) {&nbsp; k = keys[i];&nbsp; console.log(k + ':' + myObj[k]);}交替实现Object.keys幻想:var myObj = {&nbsp; &nbsp; 'b': 'asdsadfd',&nbsp; &nbsp; 'c': 'masdasaf',&nbsp; &nbsp; 'a': 'dsfdsfsdf'&nbsp; },&nbsp; keys = Object.keys(myObj),&nbsp; i, len = keys.length;keys.sort();for (i = 0; i < len; i++) {&nbsp; k = keys[i];&nbsp; console.log(k + ':' + myObj[k]);}

犯罪嫌疑人X

很多人都提到“对象不能排序”但在那之后,他们给了你一个可行的解决方案。矛盾,不是吗?没有人提到为什么这些解决办法是有效的。它们是这样的,因为在大多数浏览器的实现中,对象中的值都是按照添加的顺序存储的。这就是为什么如果您从已排序的键列表中创建新对象,它将返回预期的结果。我认为我们还可以增加一个解决方案-ES5功能方法:function&nbsp;sortObject(obj)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Object.keys(obj).sort().reduce(function&nbsp;(result,&nbsp;key)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result[key]&nbsp;=&nbsp;obj[key]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;result; &nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;{});}以上版本(格式为“一行”):function&nbsp;sortObject(o)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Object.keys(o).sort().reduce((r,&nbsp;k)&nbsp;=>&nbsp;(r[k]&nbsp;=&nbsp;o[k],&nbsp;r),&nbsp;{});}对上述例子的简短解释(如评论中所问):Object.keys在提供的对象中给出一个键列表(obj或o),然后我们使用默认排序算法对这些数据进行排序,下一步是.reduce用于将该数组转换回对象,但这次使用的是所有的键排序。
随时随地看视频慕课网APP
我要回答