實作函數,將陣列中的奇數數字做加總

今天來實作一個函數,針對陣列中的奇數數字做加總

用Javascript撰寫

迴圈的方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function oddSum(arr) {
let sum = 0;
for(let i = 0; i < arr.length; i++) {
if(arr[i] % 2 ===1) {
sum += arr[i]
}
}
return sum;
}

// 測試
const input = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const result = oddSum(input);
console.log(result);
// 25

函數function命名為oddSum,括號裡面名字(arr)代表陣列
一開始提供容器名稱是sum,初始值是0
用迴圈的方式,在陣列裡面一個一個跑
從陣列[0]開始跑,跑到陣列的最後一個數就結束迴圈
除以2會留下1的餘數(也就是奇數)
sum = sum + arr[i]
最後return sum

陣列filter、reduce方式

1
2
3
4
5
6
function OddSum(arr) {
const oddNumbers = arr.filter(num => num % 2 === 1);
const sum = oddNumbers.reduce((acc, curr) => acc + curr, 0);
return sum;
}

arr.filter(num => num % 2 === 1);
利用filter先過濾出奇數,符合num % 2 === 1這個條件的值會留下來,奇數會保留在陣列裡面

oddNumbers.reduce((acc, curr) => acc + curr, 0)
接下來,有了奇數oddNumbers之後,計算陣列裡面的數值

reduce進階用法可以參考MDN

參考資料
Array.prototype.filter()
Array.prototype.reduce()

用Ruby on rails撰寫

迴圈的方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def sum_of_odd_numbers(arr)
sum = 0

arr.each do |num|
sum += num if num.odd?
end

return sum
end

// 測試
input = [1, 2, 3, 4, 5, 6, 7, 8, 9]
result = sum_of_odd_numbers(input)
puts "陣列中奇數數字的總和為: #{result}"

如果用Ruby on rails撰寫
一樣先給容器sum
迴圈利用each的方法
由於Ruby on rails有.odd這個東西,可以直接檢查是不是奇數
最後做return sum

select、sum的方式

1
2
3
4
5
6
7
8
9
def sum_of_odd_numbers(arr)
sum = arr.select { |num| num.odd? }.sum
return sum
end

// 測試
input = [1, 2, 3, 4, 5, 6, 7, 8, 9]
result = sum_of_odd_numbers(input)
puts "陣列中奇數數字的總和為: #{result}"

Ruby on rails 有select方法, 在block設定條件{ },符合條件就會留下
條件是odd
去篩選陣列裡面的元素到一個新的陣列裡面
最後做sum,這個也是Ruby on rails本身有的方法

參考資料
ruby-selcet
ruby-sum