Problem
- Find the sum of the odd numbers within an array, after cubing the initial integers.
- 초기 정수를 세제곱한 후, 배열 내 홀수의 합을 반환한다.
- This function will return ‘undefined’ if any of the values aren’t numbers.
- 이 함수는 값이 숫자가 아닌 경우, ‘undefined’를 반환한다.
Solution 01
function cubeOdd(arr) {
let result = 0;
for (let i = 0; i < arr.length; i++) {
if (isNaN(arr[i])) return undefined;
if (arr[i] % 2 !== 0) {
const cubed = arr[i] * arr[i] * arr[i];
result += cubed;
}
}
return result;
}
cubeOdd([1, 2, 3]); // 28
cubeOdd([1, 2, 3, 4]); // 28
cubeOdd([-3, -2, 2, 3]); // 0
cubeOdd(['a', 1, 2, 'd']); // undefined
isNaN()
: 값이 숫자인지를 확인한다. (Not a Number)
Solution 02
function cubeOdd(arr) {
let result = 0;
for (let i = 0; i < arr.length; i++) {
if (isNaN(arr[i])) return undefined;
if (arr[i] % 2 !== 0) {
result += Math.pow(arr[i], 3);
}
}
return result;
}
cubeOdd([1, 2, 3]); // 28
cubeOdd([1, 2, 3, 4]); // 28
cubeOdd([-3, -2, 2, 3]); // 0
cubeOdd(['a', 1, 2, 'd']); // undefined
Math.pow(x, y)
: x의 값을 y의 거듭제곱(x^y)으로 반환한다.
Solution 03
function cubeOdd(arr) {
let result = arr.filter(i => i % 2 !== 0).map(i => i * i * i).reduce((sum, i) => sum + i, 0);
return isNaN(result) ? undefined : result;
}
cubeOdd([1, 2, 3]); // 28
cubeOdd([1, 2, 3, 4]); // 28
cubeOdd([-3, -2, 2, 3]); // 0
cubeOdd(['a', 1, 2, 'd']); // undefined
filter()
: 테스트를 통과한 배열의 각 값을 모아, 새 배열로 반환한다.
map()
: 배열 내 모든 element에 대해, 호출한 함수의 결과를 모아 새 배열로 반환한다.
reduce()
: 배열을 하나의 값으로 줄이고, 그 값을 반환한다.