当前位置: 代码迷 >> JavaScript >> javascript如何在按属性排序后获取对象的顺序
  详细解决方案

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

热度:4   发布时间:2023-06-05 09:35:01.0
let o = {
    a: {value: 3},
    b: {value: 1}, 
    c: {value: 4}, 
    d: {value: 2}
};

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

{
    a: {value: 3, order: 2},
    b: {value: 1, order: 4}, 
    c: {value: 4, order: 1}, 
    d: {value: 2, order: 3}
}

如何在 js 中实现?

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

 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);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

您可以对对象中的值进行排序,然后遍历对象键以检查当前值是否与sorted数组中的当前值相同,如果是,则可以将当前对象order属性设置为 index+ 1(因为索引从 0 开始):

请参阅下面的示例:

 const o = { a: {value: 3}, b: {value: 1}, c: {value: 4}, d: {value: 2} }, sorted = Object.values(o).sort(({value:a},{value:b}) => ba); sorted.forEach(({value}, i) => { for(key in o) { if(o[key].value == value) o[key].order = i+1 } }); console.log(o);

但是,就时间复杂度而言,这不是最佳解决方案,我相信可以改进

结合和的答案

 let myObject = { a: {value: 3}, b: {value: 1}, c: {value: 4}, d: {value: 2} }; Object .values(myObject) .sort(({value: a}, {value: b}) => ba) .forEach((k, i) => k.order = i+1) console.log(myObject)
 .as-console-wrapper { max-height: 100% !important; top: 0; }

  相关解决方案