เรามีอาร์เรย์ของอาร์เรย์เช่นนี้ −
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));
}; ผลลัพธ์
ต่อไปนี้เป็นผลลัพธ์ในคอนโซล -
[ 1731, 140 ]