分別計算每個子陣列的平均值,然後返回所有平均值之和(JavaScript)


給定的問題陳述要求我們分別計算每個子陣列的平均值,然後利用JavaScript的功能返回所有平均值的總和。當我們討論子陣列的平均值時,我們可以使用JavaScript的reduce方法。

JavaScript中的reduce()方法是什麼?

讓我們瞭解一下JavaScript中reduce函式的工作原理。

在JavaScript中,reduce方法用於透過迭代陣列的每個專案將陣列簡化為單個值。並透過應用回撥函式來根據每次迭代的結果累積值。reduce方法基本上接受兩個引數:累加器和當前值。

累加器是來自先前迭代的累積值,或者是傳遞給reducer函式的初始值。當前值是陣列中正在處理的當前元素。

以下是定義JavaScript列表的語法:

const arr = [1, 2, 3, 4, 5];
const sum = arr.reduce((acc, val) => acc + val, 0);
console.log(sum); 

輸出

15

給定問題的邏輯

在給定的問題陳述中,我們將找到每個子陣列的平均值,然後返回所有平均值的總和。為了實現這個演算法,我們需要透過迭代陣列並使用reduce方法來分別計算每個子陣列中元素的總和來分別計算每個子陣列的平均值,然後我們將它除以子陣列的長度。

演算法

步驟1 - 步驟1:宣告一個名為sumOfAverages的函式,該函式接收一個元素子陣列作為輸入。

步驟2 - 步驟1:宣告一個名為sumOfAverages的函式,該函式接收一個元素子陣列作為輸入。

步驟3 - 現在必須定義一個for迴圈,以便遍歷子陣列的每個元素。使用迴圈內的reduce方法獲取子陣列中每個元素的平均值。

步驟4 - 此步驟將計算所有平均值的總和。

步驟5 - 在最後一步中,將結果作為總和返回。

示例

// declare a function for getting averages
function sumOfAverages(arr) { 
  var sum = 0; 
  for (let subArr of arr) {
    var avg = subArr.reduce((acc, val) => acc + val) / subArr.length;
    sum += avg;
  }
  return sum;
}
const arr = [[1, 2, 3], [4, 5], [6, 7, 8, 9]];
const result = sumOfAverages(arr);
console.log(result);

輸出

14

複雜度

每當我們討論時間複雜度時,它都是根據執行特定函式以獲得結果所需的時間來衡量的。

在我們的例子中,我們最初在函式中使用了for迴圈,該迴圈遍歷陣列的長度。因此,for迴圈花費O(n^2)的時間來迭代陣列中的每個子陣列。它還使用reduce函式來獲取每個陣列中元素的總和。reduce函式本身需要O(n)的時間來執行。其中n是子陣列的長度。

如果我們討論空間複雜度,則此函式將佔用O(1)的記憶體空間,因為該函式使用恆定的額外記憶體來儲存總和和平均值。

結論

這是在JavaScript中計算子陣列的平均值和總和最直接、最可靠的方法。正如我們在上述實現中看到的,sumOfAverages函式分別計算每個子陣列的平均值,並返回所有平均值的總和。它的時間複雜度為O(n^2),空間複雜度為O(1)。由於時間複雜度高,此函式可能適用於小的輸入陣列,但不適用於大的輸入陣列。

更新於:2023年8月22日

瀏覽量:159

啟動你的職業生涯

完成課程獲得認證

開始
廣告