在 JavaScript 中尋找分數組合的最簡單形式的函式


我們有一個這樣的陣列 −

const arr = [[12, 56], [3, 45], [23, 2], [2, 6], [2, 8]];

請注意,雖然陣列可以有任何數量的元素,但每個子陣列應該嚴格包含兩個數字。

每個子陣列中的兩個數字表示一個分數。比如第一個子陣列表示的分數是 12/56,第二個是 3/45,依此類推。

我們需要編寫一個 JavaScript 函式,它接受這樣一個數組,並計算由所有子陣列表示的分數的總和。

我們需要計算分數形式的總和(即,不將它們轉換為小數)。

並將總和作為表示結果分數的兩個元素的陣列返回。

因此,讓我們為這個函式編寫程式碼 −

示例

程式碼如下 −

const arr = [[12, 56], [3, 45], [23, 2], [2, 6], [2, 8]];
const gcd = (a, b) => {
   let num = 2, res = 1;
   while(num >= Math.min(a, b)){
      if(a % num === 0 && b % num === 0){
         res = num;
      };
      num++;
   };
   return res;
}
const sumFrac = (a, b) => {
   const aDenom = a[1], aNumer = a[0];
   const bDenom = b[1], bNumer = b[0];
   let resDenom = aDenom * bDenom;
   let resNumer = (aDenom*bNumer) + (bDenom*aNumer);
   const greatestDivisor = gcd(resDenom, resNumer);
   return [resNumer/greatestDivisor, resDenom/greatestDivisor];
};
const sumArrayOfFractions = arr => {
   return arr.reduce((acc, val) => sumFrac(acc, val));
};
console.log(sumArrayOfFractions(arr));

輸出

控制檯中的輸出為 −

[ 1731, 140 ]

更新於: 17-Oct-2020

78 次瀏覽

開啟你的 職業生涯

完成課程即可獲得認證

入門
廣告
© . All rights reserved.