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

我有一个嵌套的对象数组,如下所示:


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 之类的库


拉莫斯之舞
浏览 225回答 3
3回答

沧海一幻觉

首先查看所有对象sort及其details数组:mainArray.forEach(obj => obj.details.sort((a, b) => b.score - a.score));然后sort在阵列本身通过比较第一score中details数组: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);

慕后森

首先对内部数组进行排序,然后最高值将位于第一个位置,然后使用该值对外部数组进行排序:  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);

jeck猫

您可以使用 Array.sort() 来完成此操作。首先对mainArray.details数组进行排序,然后对mainArray.请参阅以下示例:mainArray.forEach(function(elem) {&nbsp; elem.details.sort(function(a, b) {&nbsp; &nbsp; return b.score - a.score;&nbsp; })})mainArray.sort(function(a, b) {&nbsp; return b.details[0].score - a.details[0].score;})console.log(mainArray);<script>&nbsp; mainArray = [&nbsp; &nbsp;{ name: 'a',age: 10, details: [ { desc: 'test1' , score: 6 }, { desc: 'testa' , score: 10 }] },&nbsp; &nbsp;{ name: 'b',age: 20, details: [ { desc: 'test2' , score: 30 }, { desc: 'testb' , score: 34 }] },&nbsp; &nbsp;{ name: 'c',age: 40, details: [ { desc: 'test3' , score: 40 }, { desc: 'testc' , score: 7 }] }]</script>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript