JavaScript陣列中每n個元素一組求平均值
給定問題要求找出陣列中每n個元素一組的平均值。如果陣列中有m個元素,則計算每組的平均值,並以陣列形式顯示結果。
理解問題
假設陣列中有6個元素,每組2個元素。現在分別計算每組的平均值。現在我們有了它們的平均值,可以將它們組合成一個數組。

為了實現這個問題,我們使用了reduce()、push()和slice()。這些是javascript中的預定義方法。
reduce()函式將對陣列的每個元素執行一個reducer函式,並給出一個單一的輸出值。reduce()函式的語法如下:
array.reduce(callbackFunction(currentValue, currentIndex), initialValue)
push()函式用於將所有元素推入陣列。它在最後一個索引處向陣列新增一個新項。它還會更改陣列的大小。“push()”的語法如下:
輸入
colors = ["Red", "Blue", "Black"];
colors.push("Pink","Grey");
輸出
[ 'Red', 'Blue', 'Black', 'Pink', 'Grey' ]
slice()函式透過切片從陣列中返回選定的項作為新陣列。此函式的機制是從指定的起點到終點選擇元素。此函式的特性是它不會更改實際陣列。語法如下:
輸入
colors = ["Red", "Blue", "Black", "Pink", "Grey"]; color = colors.slice(1,3);
輸出
[ 'Blue', 'Black' ]
演算法 - 使用slice、reduce和push函式
步驟1:為了解決這個問題,宣告一個名為groupAverage的函式,該函式接收一個整數陣列作為輸入。
步驟2:宣告函式後,我們需要宣告一個數組來儲存元素,並將其命名為result,值為0(初始化為空)。
步驟3:使用for迴圈遍歷每個整數元素,直到array.length。
步驟4:這是我們將建立元素組並將它們分配給batch變數的主要步驟。
步驟5:此步驟將確定我們建立的每組的平均值。為此,我們將新增每組的組成部分,計算它們的平均值,並將avg變數賦值。
步驟6:現在,在這個步驟中,計算出的平均值將被新增到或推入result陣列中。
步驟7:給出計算每組平均值後的結果。獲得平均值後,我們需要將它們推入一個新陣列。因此,結果將是陣列的陣列。
示例
//Define a function to calculate average
function groupAverage (a, n) {
var result = [];
for (let i = 0; i < a.length; i =i+n) {
var batch = a.slice(i, i + n);
var avg = batch.reduce((sum, b) => sum + b, 0) / batch.length;
result.push(avg);
}
return result;
}
//Define array and number to calculate average of groups
var arr = [11, 21, 31, 41, 51, 61, 71, 81, 91];
var num = 3;
// Calling the function and store it in result
var output = groupAverage(arr, num);
console.log("Average of every group of n elements in an array")
console.log(output);
輸出
Average of every group of n elements in an array [ 21, 51, 81 ]
在上面的程式碼中,我們定義了一個名為groupAverage()的函式,它接受兩個引數:一個數組'a'和一個數字'n'。使用for迴圈迭代陣列的元素,每步增加n。
在迴圈內,將陣列從當前索引切片到前面n個元素,並將結果新增到名為group的變數中。透過對group呼叫javascript函式reduce()併除以其長度來計算group的平均值,並將結果賦值給名為avg的變數。現在將avg值推入result陣列。然後返回並顯示函式的結果。
演算法 - 使用兩個for迴圈
步驟1:第一步,定義包含一些值的陣列。
步驟2:建立一個函式並命名為groupAvg()。該函式接受兩個引數陣列和num。其中num是單個組中元素的數量,陣列是我們第一步中定義的變數。
步驟3:第二步之後,定義一個數組來儲存結果。
步驟4:定義一個for迴圈,直到陣列的長度。還初始化一個sum變數,初始值為0。
步驟5:在此步驟中,宣告另一個for迴圈,它將迭代組元素。
步驟6:在此階段確定該值是否為數字。如果沒有數值,則將預設值設定為0。
步驟7:在result陣列中,新增各個組的平均值。
步驟8:最後一步,列印輸出並返回result的值。
示例
//Declare an array with name array
const array = [2, 1, 5, 4, 1, 3, 6, 7, 9];
//Function to calculate Average of groups
function groupAvg(array, num) {
var result = [];
for (let i = 0; i < array.length;) {
var sum = 0;
for(let j = 0; j< num; j++){
sum += +array[i++] || 0
}
result.push(sum/num);
}
return result
}
console.log("Group average for 3 and 2 items respectively: ")
console.log(groupAvg(array, 3))
console.log(groupAvg(array, 2))
輸出
Group average for 3 and 2 items respectively: [ 2.666666666665, 2.666666666666665, 7.33333333333333 ] [ 1.5, 4.5, 2, 6.5, 4.5 ]
複雜度
從上面的實現中可以看出,我們使用了for迴圈來實現預期的結果。現在我們發現groupCount()只適用於物件中存在的專案數量。那麼時間複雜度為O(n)。其中n代表輸入資料的大小。此外,由於總函式在group物件中為每個堆疊保留一個計數值,因此程式需要相同數量的記憶體,O(n)。
結論
此演算法提供了關於slice()、reduce()和push()函式用法的基本思路。此演算法的時間複雜度為O(N)。透過這個問題,我們將瞭解如何切片和計算陣列中分組元素的平均值。這就是我們如何解決給定問題的方法。它將以較低的時間複雜度和空間複雜度來提高邏輯思維和編碼能力。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP