举例:let resArr = [{'name':'p1',scores:[{'a1':15},{'a2':25},{'a3':38},{'a4':45},{'a5':51},{'a6':63},{'a7':73},{'a8':81},{'a9':29},{'a10':10}]},{'name':'p2',scores:[{'a1':51},{'a2':35},{'a3':32},{'a4':49},{'a5':57},{'a6':61},{'a7':76},{'a8':85},{'a9':24},{'a10':67}]}]
//数据结构
resArr = [{'name':'p1',scores:[{'a1':15},{'a2':25},{'a3':38},{'a4':45},{'a5':51},{'a6':63},{'a7':73},{'a8':81},{'a9':29},{'a10':10}]},{'name':'p2',scores:[{'a1':51},{'a2':35},{'a3':32},{'a4':49},{'a5':57},{'a6':61},{'a7':76},{'a8':85},{'a9':24},{'a10':67}]}]
10(a1,a2,a3,...,a10)个评委给p1,p2 打分测试
去除最低分与最高分 求取平均分,最后打印
p1最后得分是:xxx分,
p2最后得分是:xxx分,
。。。。。
p100最后得分是:xxx分,
看到这个挺懵逼的 数据结构跟一般的 数组不一样 因为数组元素属性不一致 咋办?
解析如下:
思路 当然是 区分数组得分 ,重构数组 ,进行排序 获取平均值啊
1.构造函数 拆分数组 在这里我利用对象属性 Object.keys(arr) 即可遍历元素所有属性 在这里也比较便捷 因为 只有一个属性
let aa = [{'a1':1},{'a2':2},{'a3':3},{'a4':4},{'a5':5},{'a6':6},{'a7':7},{'a8':8},{'a9':9},{'a10':10}]
//遍历
bb = aa.map(item =>{ return item[Object.keys(item)[0]]})
//打印bb
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
2.排序 自然会想到 arr 的原型方法 sort 但我们也阔以处理
//正序
var array=[1,80,4,33,21,55];
array.sort(function (x,y) {
return x-y;
});
document.writeln(array);
3.最后就是求和方法 reduce
var arr = [1, 3, 5, 7, 9];
arr.reduce(function (x, y) {
return x * 10 + y;
}); // 13579
var arr = [1, 3, 5, 7, 9];
arr.reduce(function (x, y) {
return x + y;
}); // 25
解决以上三步 其实也就解决了大部分问题了
那就来一波完整的代码
resArr.map(ite =>{
let arr = ite.scores.map(item =>{ return item[Object.keys(item)[0]]})
arr.sort((x,y)=>{
return x-y
})
let sum = arr.slice(1,9).reduce((sum,item)=>{return sum + item})
console.log(ite.name+'最后得分是:'+ sum/8)
})
// p1最后得分是:42.375
// p2最后得分是:53.5