我有這個嵌套陣列,我試圖分別對最后一個陣列中的數字求和
所以它應該為每個陣列回傳 400 也試圖獲得總數的平均值,例如,如果它是 400 那么它是 100%,如果是 399 它將是 99.99%,平均值需要來自 100% 并且如果是動態的說得通。
我一直在使用 javascript map 方法,但是每次我映射陣列時,它都會回傳相同的陣列級別,我無法訪問最后一個陣列。
arr.map(item => item.map(item2 => item2))
代碼中的示例:
const arr = [
[
[100, 100, 100, 100], // sum 400 -> average 100%
[100, 100, 100, 100], // sum 400 -> average 100%
[100, 100, 98, 100], // sum 398 -> average 99.99%
[100, 100, 100, 100], // sum 400 -> average 100%
],
[
[100, 100, 100, 99], // sum 399 -> average 99.99%
[100, 100, 100, 100], // sum 400 -> average 100%
[100, 100, 100, 100], // sum 400 -> average 100%
[100, 100, 100, 100], // sum 400 -> average 100%
]
];
結果應該是這樣的
const arr = [
[
{total: 400, average: 100%},
{total: 400, average: 100%},
{total: 398, average: 99,99%},
{total: 400, average: 100%},
],
[
{total: 399, average: 99,99%},
{total: 400, average: 100%},
{total: 400, average: 100%},
{total: 400, average: 100%},
]
];
如果有人可以提供幫助,我將不勝感激
uj5u.com熱心網友回復:
我會做這樣的事情
let data = arr.map(section => section.map(row => {
let tot = row.reduce((pv,cv) => pv cv,0);
return {'total':tot,'avg':tot/row.length "%"}
}))
uj5u.com熱心網友回復:
我建議這種方法。
const sumAndAvr = []
arr.forEach((el) => {
const subsumAndAvr = [];
el.forEach(ele=>{
let sum = 0;
let avg=0;
ele.map((el2) => {
sum = el2
})
avg=sum/ele.length
subsumAndAvr.push({ total: sum, average: avg "%" });
})
sumAndAvr.push(subsumAndAvr);
});
uj5u.com熱心網友回復:
const arr = [
[
[100, 100, 100, 100], // sum 400 -> average 100%
[100, 100, 100, 100], // sum 400 -> average 100%
[100, 100, 98, 100], // sum 398 -> average 99.99%
[100, 100, 100, 100], // sum 400 -> average 100%
],
[
[100, 100, 100, 99], // sum 399 -> average 99.99%
[100, 100, 100, 100], // sum 400 -> average 100%
[100, 100, 100, 100], // sum 400 -> average 100%
[100, 100, 100, 100], // sum 400 -> average 100%
]
];
const result = arr.map((arrOfLists) => arrOfLists.map(list =>
list.reduce((acc, num, index) => {
const newTotal=(acc.total||0) parseInt(num)
return {
average: newTotal / list.length,
total: newTotal
};
}, { })))
console.log(result)
uj5u.com熱心網友回復:
我更愿意將計算分成可重用的函式。這樣做也使 main 函式更加簡單易讀。它可能看起來像這樣:
const sum = (ns) => ns .reduce ((a, b) => a b, 0)
const mean = (ns) => sum (ns) / (ns .length || 1)
const calc = (arr) => arr .map ((xs) => xs .map ((ys) => ({
total: sum (ys),
average: mean (ys) '%'
})))
const arr = [[[100, 100, 100, 100], [100, 100, 100, 100], [100, 100, 98, 100], [100, 100, 100, 100]], [[100, 100, 100, 99], [100, 100, 100, 100], [100, 100, 100, 100], [100, 100, 100, 100]]]
console .log (calc (arr))
.as-console-wrapper {max-height: 100% !important; top: 0}
這里沒有什么棘手的。在mean我們除以ns .length || 1而不是僅僅除以ns .length避免除以零時。
計算每組的總和兩次,一次計算總和一次計算平均值,效率稍低。如果這是您的應用程式中已證明的問題,您當然可以按照 Breezer 的答案將它們組合起來。但是除非我測驗并發現這是我的代碼中的一個實際熱點,否則我不會太擔心它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/523870.html
上一篇:在2d中縮放物件以完全覆寫自身
