const compareScore = arr => {
// 先排序
arr.sort((i, j) => i.count - j.count)
let len = arr.length
let topLen = Math.ceil(len * 0.4)
let midLen = Math.ceil(len * 0.3)
// 判断topLen之后的数据和topLen最后一个比较,如果一样则topLen+1
let a = len - topLen
for (let i = 0; i < a; i++) {
if (arr[topLen - 1].count == arr[topLen].count) {
topLen++
}
}
// minLen初始值为len*0.3,经过上面的计算后,可能 len - topLen < len*0.3,所以要比较哪个小
midLen = Math.min(len - topLen, midLen)
// 判断topLen + midLen之后的数据和topLen + midLen最后一个比较,如果一样则midLen+1
let b = len - topLen - midLen
for (let i = 0; i < b; i++) {
if (arr[topLen + midLen - 1].count == arr[topLen + midLen].count) {
midLen++
}
}
let result = arr.map((item, index)=> {
if(index < topLen) {
item.score = '优'
} else if(index < topLen + midLen) {
item.score = '良'
} else {
item.score = '一般'
}
return item
})
return result
}
计算排序后的数组的40%为优,30%为良,30%为一般;数量一样的往高等级归类
于 2023-07-21 10:16:06 首次发布