반응형
Task
Sum all the numbers of a given array ( cq. list ), except the highest and the lowest element ( by value, not by index! )
The highest or lowest element respectively is a single element at each edge, even if there are more than one with the same value.
Mind the input validation.
Example
{ 6, 2, 1, 8, 10 } => 16 { 1, 1, 11, 2, 3 } => 6
If an empty value ( null, None, Nothing etc. ) is given instead of an array, or the given array is an empty list or a list with only 1 element, return 0.
solution
function sumArray(array) {
if(array ===null || array === undefined || array.length < 3) return 0
const maxNum = Math.max(...array)
const minNum = Math.min(...array)
let sum = 0;
for(let i=0; i<array.length; i++){
sum += array[i];
}
return sum - maxNum - minNum
}
sumArray(null) //0
sumArray([1,4,32,2]) //6
sumArray([1,2]) //0
Best solution
function sumArray(array) {
return Array.isArray(array) && array.length > 1
? array.reduce((s, n) => s + n, 0) - Math.min(...array) - Math.max(...array)
: 0
}
* Array.isArray() - 인자가 배열인지 판별
* reduce()
array.reduce( callback [, initailValue])
array.reduce((누적, 현재, 인덱스, 배열) => {return ~ }, 초기값)
callback : 인자에 차례대로 4가지
- 누산기 (accmulator)
- 현재 처리할 요소 (currentValue)
- (옵션) 현재 처리할 요소의 인덱스 (초기값 제공한경우 0 , 아니면 1),
- (옵션) reduce를 호출한 배열
초기값 : 콜백의 최초 호출에서 첫 번째 인수에 제공하는 값.
초기값 제공하지 않으면 배열의 첫 번째 요소 사용.
빈 배열에서 초기값 없이 reduce() 호출하면 오류가 발생.
const arr = [1,2,3,4,5]
arr.reduce((누적, 현재) => {return 누적 += 현재}, 0)
// 15
반응형
'ARCHIVE > ALGORITHM' 카테고리의 다른 글
[21.11.26] 최댓값과 최솟값 (0) | 2021.12.01 |
---|---|
[21.11.17] JadenCase 문자열 만들기 (0) | 2021.12.01 |
[21.11.22] 피보나치 수 (0) | 2021.12.01 |
[21.11.25] 두 자연수의 누적값 중 최솟값 (0) | 2021.11.25 |
[21.09.02] Javascript reverse num (0) | 2021.09.02 |