js 数组元素值属性不一致 实现平均分(欢迎支持别样简单解法)

举例: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


看着不难  但说实话确实很基础问题 ,我也只想到这  有最优解 欢迎交流

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值