在我问之前;关于这个特定主题有很多讨论,其中大部分与 ES5 相关,并不一定适用于 ES6。我试图得到一些澄清,也许可以帮助下一个在互联网上寻找答案的人。这是专门针对 ES6 的.
问题:
考虑以下对象结构:
const unsorted_object = {
'C': '0003',
'D': '0004',
'A': '0001',
'B': '0002',
'F': '0005',
};
-
如何按键对 JavaScript 对象进行排序? (已回答here https://stackoverflow.com/questions/5467129)
const sorted_object = {};
Object.keys(unsorted_object).sort().forEach(function(key) {
sorted_object[key] = unsorted_object[key];
});
-
如何按键值对 JavaScript 对象进行排序?
EDIT #1
我可能对问题#2 没有完全清楚。这个想法是根据键的值而不是键和值对 JavaScript 对象进行排序。
EDIT #2
const unsorted_object = {
'0001': '13.1666',
'0002': '11.0001',
'0003': '10.6664',
'0004': '13.1666',
'0005': '7.3331',
};
Output:
'0001': '13.1666'
'0004': '13.1666'
'0002': '11.0001'
'0003': '10.6664'
'0005': '7.3331'
ES6 中的对象键具有遍历顺序。整数键始终排在第一位,并按升序排序 (0 -> 9)。在非整数键中,保留分配的顺序(请参阅此article http://2ality.com/2015/10/property-traversal-order-es6.html)。要对对象的键进行排序,我们需要重新创建对象,并按所需的顺序添加键。
Note:这意味着排序仅适用于非整数键,因为整数始终是第一个,并且始终按升序排序。
要排序并重新创建对象:
- Use Object.entries() https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce获取键/值对数组 -
[[key, value], [key, value]]
- 按值对它们进行排序(该对中的第二项)使用数组解构 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Ignoring_some_returned_values -
[, v1]
。使用以下命令将字符串转换为数字+
操作员,
-
Reduce https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce回到一个物体。使用解构获取键和值
[k , v]
,并将它们添加到累加器对象中使用计算属性名称 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer#Computed_property_names - ({ [k]: v })
, and 对象传播 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax#Spread_in_object_literals - ({ ...r, [k]: v })
const unsorted_object = {
'0001': '13.1666',
'0002': '11.0001',
'0003': '10.6664',
'0004': '13.1666',
'0005': '7.3331',
};
const sorted_object = Object.entries(unsorted_object)
.sort(([,v1], [,v2]) => +v2 - +v1)
.reduce((r, [k, v]) => ({ ...r, [k]: v }), {});
console.log(sorted_object);
如果支持,您可以使用以下条目从条目创建对象Object.fromEntries() https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries代替Array.reduce()
:
const unsorted_object = {
'0001': '13.1666',
'0002': '11.0001',
'0003': '10.6664',
'0004': '13.1666',
'0005': '7.3331',
};
const sorted_object = Object.fromEntries(
Object.entries(unsorted_object)
.sort(([,v1], [,v2]) => +v2 - +v1)
);
console.log(sorted_object);
边缘友好版本,使用Object.assign() https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign而不是传播:
const unsorted_object = {
'0001': '13.1666',
'0002': '11.0001',
'0003': '10.6664',
'0004': '13.1666',
'0005': '7.3331',
};
const sorted_object = Object.entries(unsorted_object)
.sort(([,v1], [,v2]) => +v2 - +v1)
.reduce((r, [k, v]) => Object.assign(r, { [k]: v }), {});
console.log(sorted_object);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)