javascript如何在按属性排序后获取对象的顺序

use*_*568 1 javascript sorting

let o = {
    a: {value: 3},
    b: {value: 1}, 
    c: {value: 4}, 
    d: {value: 2}
};
Run Code Online (Sandbox Code Playgroud)

我们知道c> a> d> b,所以输出应该是

{
    a: {value: 3, order: 2},
    b: {value: 1, order: 4}, 
    c: {value: 4, order: 1}, 
    d: {value: 2, order: 3}
}
Run Code Online (Sandbox Code Playgroud)

如何在js中实现?

Nin*_*olz 5

您可以使用对象的值对键进行排序,并将顺序分配给给定的键.

let o = { a: { value: 3 }, b: { value: 1 }, c: { value: 4 }, d: { value: 2 } };

Object
    .keys(o)
    .sort((a, b) => o[b].value - o[a].value)
    .forEach((k, i) => o[k].order = i + 1);

console.log(o);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)