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

javascript如何在按属性排序后获取对象的顺序,javascript,sorting,Javascript,Sorting,我们知道c>a>d>b,所以输出应该是 let o = { a: {value: 3}, b: {value: 1}, c: {value: 4}, d: {value: 2} }; 如何在js中实现这一点?您可以获取键,并使用对象的值对它们进行排序,然后将顺序分配给给定的键 设o={a:{value:3},b:{value:1},c:{value:4},d:{value:2}; 对象 .凯索 .sorta,b=>o[b]。值-o[a]。值 .forEac

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

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

如何在js中实现这一点?

您可以获取键,并使用对象的值对它们进行排序,然后将顺序分配给给定的键

设o={a:{value:3},b:{value:1},c:{value:4},d:{value:2}; 对象 .凯索 .sorta,b=>o[b]。值-o[a]。值 .forEachk,i=>o[k].order=i+1; 控制台标志;
.as console wrapper{max height:100%!important;top:0;}您可以获取键,使用对象的值对它们进行排序,并将顺序分配给给定的键

设o={a:{value:3},b:{value:1},c:{value:4},d:{value:2}; 对象 .凯索 .sorta,b=>o[b]。值-o[a]。值 .forEachk,i=>o[k].order=i+1; 控制台标志;
。作为控制台包装器{max height:100%!important;top:0;}您可以对对象中的值进行排序,然后循环对象键以检查当前值是否与排序数组中的当前值相同,如果相同,则可以将当前对象顺序属性设置为索引+1,因为索引从0开始:

见下例:

常数o={ a:{value:3}, b:{value:1}, c:{value:4}, d:{value:2} }, sorted=Object.valueso.sort{value:a},{value:b}=>b-a; sorted.forEach{value},i=>{ 福基在o{ ifo[key]。value==value o[key]。顺序=i+1 } };
控制台标志 可以对对象中的值进行排序,然后循环对象键以检查当前值是否与排序数组中的当前值相同。如果相同,则可以将当前对象顺序属性设置为索引+1,因为索引从0开始:

见下例:

常数o={ a:{value:3}, b:{value:1}, c:{value:4}, d:{value:2} }, sorted=Object.valueso.sort{value:a},{value:b}=>b-a; sorted.forEach{value},i=>{ 福基在o{ ifo[key]。value==value o[key]。顺序=i+1 } }; 控制台标志 结合和的答案

设myObject={a:{value:3},b:{value:1},c:{value:4},d:{value:2}; 对象 .valuesmyObject .sort{value:a},{value:b}=>b-a .forEachk,i=>k.order=i+1 console.logmyObject .作为控制台包装器{最大高度:100%!重要;顶部:0;}结合和的答案

设myObject={a:{value:3},b:{value:1},c:{value:4},d:{value:2}; 对象 .valuesmyObject .sort{value:a},{value:b}=>b-a .forEachk,i=>k.order=i+1 console.logmyObject
.as控制台包装{max height:100%!important;top:0;}您不能在JavaScript中对对象属性排序。即使你构建了一个带有预排序属性的对象,也不能保证它们会以相同的顺序显示。@VladimirBogomolov我的意思是根据每个子对象的value属性获取顺序/等级,然后你可以这样编码:const order=object.keyso.sortfunctiona,b{return o[b]['value']-o[a]['value']}什么,如果某个对象共享相同的值,如{a:{value:3},b:{value:1},c:{value:1}?您不能在JavaScript中对对象属性进行排序。即使您使用预排序的属性构建对象,也不能保证它们将以相同的顺序显示。@VladimirBogomolov我的意思是根据每个子对象中的值属性获取顺序/等级,然后您可以这样编写代码:const order=object.keyso.sortfunctiona,b{return o[b]如果某个对象共享相同的值,比如{a:{value:3},b:{value:1},c:{value:1},怎么办非常优雅,我喜欢这个。我做了一个性能测试来确定最佳选择:你赢了!你在Chrome和Firefox中赢了,但在Edge中输了。这里没有Safari!非常优雅,我喜欢这个。我做了一个性能测试来确定最佳选择:你赢了!你在Chrome和Firefox中赢了,但在Edge中输了。这里没有Safari!
{
    a: {value: 3, order: 2},
    b: {value: 1, order: 4}, 
    c: {value: 4, order: 1}, 
    d: {value: 2, order: 3}
}