1. 程式人生 > >js 陣列元素值屬性不一致 實現平均分(歡迎支援別樣簡單解法)

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


看著不難  但說實話確實很基礎問題 ,我也只想到這  有最優解 歡迎交流