【发布时间】:2021-07-30 11:07:16
【问题描述】:
我有一个这样的对象数组,
[
{
user: 'A',
answers: [
{
id: 1,
score: 3,
},
{
id: 2,
score: 1,
},
...
]
},
{
user: 'B',
answers: [
...
我有 200 个用户,每个用户回答一组 40 个问题,每个问题都有一个 id 和一个分数。
我要做的是将每个问题的分数相加。这样我就可以找出哪个问题得分最高,哪个问题得分最低。也就是顶部问题和底部问题。
最好的方法是什么?
我目前的做法感觉有点啰嗦。
const allAns = []
myList.forEach( user => allAns.push( ...user.answers ) )
const questionsScored = allAns.reduce( ( obj, cur ) => {
!obj[ cur.id ] ? obj[ cur.id ] = cur.score : obj[ cur.id ] += cur.score
return obj
}, {} )
const sortingList = []
for ( const qn in questionsScored ) {
sortingList.push( [ qn, questionsScored[ qn ] ] )
}
sortingList.sort( ( a, b ) => b[ 1 ] - a[ 1 ] )
console.log( sortingList[ 0 ], sortingList[ sortingList.length - 1 ] )
【问题讨论】:
-
你有没有尝试过?在这里发布吗?
-
更新了我目前正在使用的帖子。
标签: javascript arrays loops object ecmascript-6