정수 배열 numbers
가 매개변수로 주어집니다. numbers
의 원소의 평균값을 return하도록 solution 함수를 완성해주세요.
function solution(numbers) {
var answer = 0;
return answer;
}
numbers | result |
---|---|
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] | 5.5 |
[89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99] | 94.0 |
numbers의 원소들의 평균 값은 5.5입니다.
n이 4이므로 2 + 4 = 6을 return 합니다.
function solution(numbers) {
let result = 0;
for(let i=0; i<numbers.length; i++) {
result+=numbers[i];
}
return (result/numbers.length);
}
reduce()
를 이용하여 푼게 신기해서 가져옴
역시 많이 알아야 제일 효율적으로 풀 수 있는거구나
function solution(numbers) {
var answer = numbers.reduce((a,b) => a+b, 0) / numbers.length;
return answer;
}
function solution(numbers) {
var answer = 0;
for(i of numbers) {
answer += i
}
return answer / numbers.length;
}
배열을 기반으로 하나의 결과값을 도출할 때 사용되는 함수이다.
함수를 실행하면 하나의 결과값만 반환한다.
기본적으로 아래와 같은 형태를 가진다.
array.reduce(callback[, initialValue])
아래 두 개의 코드는 서로 같은 코드이다. return을 생략하고 작성했는지 안했는지의 차이
acc
: 누적되는 값. 최종적으로 출력되는 값 (누산기)cur
: 현재 요소const numbers = [1, 2, 3, 4];
let sum = numbers.reduce((acc, cur) => acc + cur);
const numbers = [1, 2, 3, 4];
let sum = numbers.reduce((acc, cur) => {
return acc + cur;
});
위 함수의 동작 방식은 아래와 같다.
acc += cur; // 1 += 2;
acc += cur; // 3 += 3;
acc += cur; // 6 += 4;
console.log(acc); // 10
acc
: 누적되는 값. 최종적으로 출력되는 값 (누산기)cur
: 현재 요소initialValue
: acc의 초기값 (optional)const numbers = [4, 3, 2, 1];
let sum = numbers.reduce((acc, cur) => acc + cur, 0);
console.log(sum);
이와 같이 초기값을 설정하면 index가 1부터가 아니라 0부터 들어가게 된다.
acc += cur; // 0 += 1;
acc += cur; // 1 += 2;
acc += cur; // 3 += 3;
acc += cur; // 6 += 4;
console.log(acc); // 10
써본적도 있는 코드인데 맨날 헷갈려서 다시 정리해볼 겸 찾아봤다.
for of
는 배열을 포함한 iterable객체를 순회하는 반복문이다.
for in
은 객체의 프로퍼티. 키값을 순회하는 반복문이고,
forEach()
는 배열을 순회하는 전용 메서드이다.
let arr = ["1", "2", "3"];
for (let item of arr) {
console.log(item); // 1, 2, 3
}
let obj = {
a: 1,
b: 2,
c: 3
};
for (let prop in obj) {
console.log(prop); // a, b, c
console.log(obj[prop]); // 1, 2, 3
}
만약 배열에서 for...in을 사용하게 되면 배열의 요소만 출력되는 for...of와 달리 모든 요소가 출력된다.
Object.prototype.objCustom = function () {}; //Object 프로토타입에 커스텀 속성 추가
Array.prototype.arrCustom = function () {}; //Array 프로토타입에 커스텀 속성 추가
let iterable = [1, 2, 3];
iterable.foo = "hello"; //배열객체에 foo 속성 추가 및 값 할당.
console.log("for.. in 반복 결과");
for (let i in iterable) {
console.log(i); // 0, 1, 2, foo, arrCustom, objCustom
// 인덱싱 순서를 보장할 수 없음
}
console.log("for.. of 반복 결과");
for (let i of iterable) {
console.log(i); // 1, 2, 3
}
const arr = ["1", "2", "3"];
arr.forEach(element => {
document.write(element); // 1, 2, 3
});