为了账号安全,请及时绑定邮箱和手机立即绑定

如何通过嵌套对象内的特定键对嵌套对象数组进行排序?

如何通过嵌套对象内的特定键对嵌套对象数组进行排序?

拉莫斯之舞 2021-05-31 14:38:46
我有一个嵌套的对象数组,如下所示:mainArray = [   { name: 'a',age: 10, details: [ { desc: 'test1' , score: 6 }, { desc: 'testa' , score: 10 }] },   { name: 'b',age: 20, details: [ { desc: 'test2' , score: 30 }, { desc: 'testb' , score: 34 }] },   { name: 'c',age: 40, details: [ { desc: 'test3' , score: 40 }, { desc: 'testc' , score: 7 }] }]我想要做的是根据分数对我的 mainArray 进行排序:首先,我想按降序对详细信息数组进行排序(得分最高的在前)然后按降序对mainArray进行排序(得分最高的在前)此外,可能存在详细信息在数组中只有一项的情况这是我想要的结果:mainArray = [    { name: 'c',age: 40, details: [ { desc: 'test3' , score: 40 }, { desc: 'testc' , score: 7 } ] }   { name: 'b',age: 20, details: [ { desc: 'test2' , score: 34 }, { desc: 'testb' , score: 30 } ] }   { name: 'a',age: 10, details: [ { desc: 'test1' , score: 20 }, { desc: 'testa' , score: 6 } ] }]我尝试过的是展平整个主数组,然后按分数排序。但我正在寻找更有效的解决方案。我也喜欢 lodash 等或 vanillajs 之类的库
查看完整描述

3 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

首先查看所有对象sort及其details数组:

mainArray.forEach(obj => obj.details.sort((a, b) => b.score - a.score));

然后sort在阵列本身通过比较第一scoredetails数组:

mainArray.sort((a, b) => b.details[0].score - a.details[0].score);

例子:

let mainArray = [

   { name: 'a',age: 10, details: [ { desc: 'test1' , score: 6 }, { desc: 'testa' , score: 10 }] },

   { name: 'b',age: 20, details: [ { desc: 'test2' , score: 30 }, { desc: 'testb' , score: 34 }] },

   { name: 'c',age: 40, details: [ { desc: 'test3' , score: 40 }, { desc: 'testc' , score: 7 }] }

];


mainArray.forEach(obj => obj.details.sort((a, b) => b.score - a.score));

mainArray.sort((a, b) => b.details[0].score - a.details[0].score);


console.log(mainArray);


查看完整回答
反对 回复 2021-06-03
?
慕后森

TA贡献1802条经验 获得超5个赞

首先对内部数组进行排序,然后最高值将位于第一个位置,然后使用该值对外部数组进行排序:


  for(const { details } of mainArray)

    details.sort((a, b) => b.score - a.score);


 mainArray.sort((a, b) => b.details[0].score - a.details[0].score);


查看完整回答
反对 回复 2021-06-03
?
jeck猫

TA贡献1909条经验 获得超7个赞

您可以使用 Array.sort() 来完成此操作。


首先对mainArray.details数组进行排序,然后对mainArray.


请参阅以下示例:


mainArray.forEach(function(elem) {

  elem.details.sort(function(a, b) {

    return b.score - a.score;

  })

})


mainArray.sort(function(a, b) {

  return b.details[0].score - a.details[0].score;

})


console.log(mainArray);

<script>

  mainArray = [

   { name: 'a',age: 10, details: [ { desc: 'test1' , score: 6 }, { desc: 'testa' , score: 10 }] },

   { name: 'b',age: 20, details: [ { desc: 'test2' , score: 30 }, { desc: 'testb' , score: 34 }] },

   { name: 'c',age: 40, details: [ { desc: 'test3' , score: 40 }, { desc: 'testc' , score: 7 }] }

]

</script>


查看完整回答
反对 回复 2021-06-03
  • 3 回答
  • 0 关注
  • 224 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信