【问题标题】:Sorting inside nested object在嵌套对象内排序
【发布时间】:2020-04-11 23:57:57
【问题描述】:

我是 JS 初学者,正在尝试根据 SUFFIX 的键值对按升序对嵌套对象(即 PARTS)进行排序,如下所示:

Object: {
ID: 65,
MAIN: {ID: "GR", VALUE: 45},
PARTS:{
       0:{CODE: "GR3", PREFIX: "GR", SUFFIX: 3, YEAR: 3},
       1:{CODE: "GR4", PREFIX: "GR", SUFFIX: 4, YEAR: 2},
       2:{CODE: "GR1", PREFIX: "GR", SUFFIX: 1, YEAR: 5},
       3:{CODE: "GR2", PREFIX: "GR", SUFFIX: 2, YEAR: 4}
}
}

预期输出:

Object: {
ID: 65,
MAIN: {ID: "GR", VALUE: 45},
PARTS:{
       0:{CODE: "GR1", PREFIX: "GR", SUFFIX: 1, YEAR: 5},
       1:{CODE: "GR2", PREFIX: "GR", SUFFIX: 2, YEAR: 4},
       2:{CODE: "GR3", PREFIX: "GR", SUFFIX: 3, YEAR: 3},
       3:{CODE: "GR4", PREFIX: "GR", SUFFIX: 4, YEAR: 2}
}
}

任何建议如何获得所需的输出。

【问题讨论】:

  • 拥有一个带有0...n 数字键的对象没有多大意义。为什么不使用数组?此外,即使在排序之后,CODE: 键看起来也是相同的。你能澄清一下吗?最后,我建议尝试一下并分享您的代码尝试。谢谢。

标签: javascript sorting object


【解决方案1】:

您可以使用values 获取PARTS 并排序,然后使用assign 将数组转换为对象。

let obj = {
ID: 65,
MAIN: {ID: "GR", VALUE: 45},
PARTS:{
       0:{CODE: "GR3", PREFIX: "GR", SUFFIX: 3, YEAR: 3},
       1:{CODE: "GR4", PREFIX: "GR", SUFFIX: 4, YEAR: 2},
       2:{CODE: "GR1", PREFIX: "GR", SUFFIX: 1, YEAR: 5},
       3:{CODE: "GR2", PREFIX: "GR", SUFFIX: 2, YEAR: 4}
}
}

let res = Object.values(obj.PARTS).sort((a,b) => a.SUFFIX - b.SUFFIX);

obj.PARTS = Object.assign({}, res);

console.log(obj)

let obj = {
ID: 65,
MAIN: {ID: "GR", VALUE: 45},
PARTS:{
       0:{CODE: "GR3", PREFIX: "GR", SUFFIX: 3, YEAR: 3},
       1:{CODE: "GR4", PREFIX: "GR", SUFFIX: 4, YEAR: 2},
       2:{CODE: "GR1", PREFIX: "GR", SUFFIX: 1, YEAR: 5},
       3:{CODE: "GR2", PREFIX: "GR", SUFFIX: 2, YEAR: 4}
}
}

let res = Object.values(obj.PARTS).sort((a,b) => a.SUFFIX - b.SUFFIX);

obj.PARTS = Object.assign({}, res);

console.log(obj)

【讨论】:

    【解决方案2】:
    var obj = {
    ID: 65,
    MAIN: {ID: "GR", VALUE: 45},
    PARTS:{
           0:{CODE: "GR3", PREFIX: "GR", SUFFIX: 3, YEAR: 3},
           1:{CODE: "GR4", PREFIX: "GR", SUFFIX: 4, YEAR: 2},
           2:{CODE: "GR1", PREFIX: "GR", SUFFIX: 1, YEAR: 5},
           3:{CODE: "GR2", PREFIX: "GR", SUFFIX: 2, YEAR: 4}
        }
    };
    var sortable = [];
    for (let p in obj.PARTS) {
        sortable.push(obj.PARTS[p]);
    }
    obj.PARTS = sortable.sort(function(a, b) {
        return a.SUFFIX > b.SUFFIX;
    });
    

    现在你的 obj 的嵌套部分根据 SUFFIX 升序排序

    【讨论】:

      猜你喜欢
      • 2019-06-25
      • 1970-01-01
      • 2022-08-17
      • 1970-01-01
      • 2013-10-08
      • 1970-01-01
      • 1970-01-01
      • 2017-01-28
      • 1970-01-01
      相关资源
      最近更新 更多