art*_*son 0 javascript sorting object ecmascript-6
在我问之前 关于这个特定主题有很多讨论,其中大多数与ES5有关,并不一定对ES6成立。我正在尝试澄清一些问题,也许可以帮助下一个正在互联网上寻找答案的人。具体参考ES6。
考虑以下对象结构:
const unsorted_object = {
'C': '0003',
'D': '0004',
'A': '0001',
'B': '0002',
'F': '0005',
};
Run Code Online (Sandbox Code Playgroud)
如何按键对JavaScript对象排序?(在这里回答)
const sorted_object = {};
Object.keys(unsorted_object).sort().forEach(function(key) {
sorted_object[key] = unsorted_object[key];
});
Run Code Online (Sandbox Code Playgroud)如何按键值对JavaScript对象排序?
我可能对问题2不太清楚。这个想法是根据键的值而不是键和值对JavaScript对象进行排序。
const unsorted_object = {
'0001': '13.1666',
'0002': '11.0001',
'0003': '10.6664',
'0004': '13.1666',
'0005': '7.3331',
};
Run Code Online (Sandbox Code Playgroud)
输出:
Run Code Online (Sandbox Code Playgroud)'0001': '13.1666' '0004': '13.1666' '0002': '11.0001' '0003': '10.6664' '0005': '7.3331'
ES6中的对象键具有遍历顺序。整数键始终是第一个,并且按升序排序(0-> 9)。在非整数键中,分配的顺序得以保留(请参阅本文)。要对对象的键进行排序,我们需要重新创建对象,并按要求的顺序添加键。
注意:这意味着排序将仅对非整数键起作用,因为它们始终为1,并且始终以升序排序。
排序并重新创建对象:
Object.entries()得到,如果键/值对的数组-[[key, value], [key, value]][, v1]。使用+运算符将字符串转换为数字,[k , v],然后使用计算出的属性名称 - ({ [k]: v })和对象散布 - 将它们添加到累加器对象中({ ...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);Run Code Online (Sandbox Code Playgroud)
边缘友好版本,使用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);Run Code Online (Sandbox Code Playgroud)