我有一个嵌套的对象数组,看起来像这样:
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 = [
{ 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这样的库
答案 0 :(得分:0)
首先对内部数组进行排序,然后最高值将位于第一个位置,然后对外部数组进行排序:
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);
答案 1 :(得分:0)
两个分类都需要分类功能。然后,您需要为每个array元素的每个details元素调用前一个,最后在对mainArray进行排序时,您需要根据第一个得分进行排序
var sortHighest = function(a,b) {
return a.score - b.score;
}
var sortFunc = function(a,b) {
return a.details[0].score - b.details[0].score;
}
mainArray.forEach(function(item) {
details.sort(sortHighest);
}
mainArray.sort(sortFunc);
答案 2 :(得分:0)
首先遍历所有对象并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);
答案 3 :(得分:0)
您可以使用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>