如果我有一個數字陣列并且我想讓這個數字接近平均值,我怎么能得到那個數字!
首先,我嘗試按 asc 順序對陣列進行排序,其次得到中間元素,即平均值。
注意:我使用Math.floor的情況是如果陣列的長度是奇數而不是偶數
const arr = [1, 6, 10, 3, 15, 9, 4, 7];
const arrSorted = arr.sort((a,b)=>a-b);
const nearToAVG = arrSorted[Math.floor(arr.length/2)];
console.log(nearToAVG); // 7
有沒有更好的方法讓陣列中的數字接近平均值?
uj5u.com熱心網友回復:
另一種實作這一目標的方法通過使用:
reduce將總和除以它的長度得到平均值。map遍歷該陣列并回傳每個數字及其nearByAVG (該數字與平均值之間的距離)。sort按該屬性升序并獲得第一個具有最小平均距離的屬性。
const arr = [1, 6, 10, 3, 15, 9, 4, 7];
const sum = arr.reduce((acc, curr)=>acc curr);
const avg = sum/arr.length;
const arrMaped = arr.map(num=>({num,nearByAVG: Math.abs(num-avg)}));
const arrSorted = arrMaped.sort((a,b)=>a.nearByAVG-b.nearByAVG);
console.log(arrSorted[0].num)
uj5u.com熱心網友回復:
讓我們剖析一下這個問題。您希望索引與陣列索引的平均值最接近。為此,您可以首先計算陣列的總和。知道總和后,您可以對陣列進行第二次掃描,arr以獲取每個元素與平均值的差并將其存盤在變數中。最后,如果平均值和當前索引之間的差異比存盤值更接近零,您將更新該變數。在陣列的末尾,您將得到您正在尋找的答案。
這是上面的一個簡單示例:
let sum = 0;
let nearest = arr[0];
for(let i = 0; i < arr.length; i ) {
sum = arr[i];
}
ave = sum / arr.length;
for(let i = 0; i < arr.length; i ) {
if((arr[i] - ave) < nearest) {
nearest = arr[i];
}
}
console.log(`average: ${ave}\nnearest: ${nearest}`);
// average: 6.875
// nearest: 7
uj5u.com熱心網友回復:
您應該將所有數字相加并除以陣列的長度。除此之外,排序陣列中心的數字不是數字的平均值,只是中位數。
let numArray=[12,32,134,23,54,345,32,1]; //all elements numbers
let num=0;
for(let number of numArray) {num =number};
num/=numArray.length
console.log(num)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/464070.html
標籤:javascript 数组 算法 数学
上一篇:它幾乎是回文嗎?
