프로퍼티 (ES5)
이름 | 기능 |
Array 함수 |
isArray() | 배열 여부 반환; 배열이면 true, 아니면 false 반환 |
Array.prototype |
indexOf() | 지정한 값에 일치하는 엘리먼트 인덱스 반환 |
lastIndexOf() | indexOf()와 같으며, 마지막 인덱스 반환 |
forEach() | 배열을 반복하면서 콜백 함수 실행 |
every() | 반환 값이 false일 때까지 콜백 함수 실행 |
some() | 반환 값이 true일 때까지 콜백 함수 실행 |
filter() | 콜백 함수에서 true를 반환한 엘리먼트 반환 |
map() | 콜백 함수에서 반환한 값을 새로운 배열로 반환 |
reduce() | 콜백 함수의 반환 값을 파라미터 값으로 사용 |
reduceRight() | reduce()와 같음. 단,배열의 끝에서 앞으로 진행 |
알고리즘 문제를 풀다 헷갈리는 메소드만 정리해보았다!
1. indexOf()
구분 | 데이터 (값) |
data | 검색 대상 |
파라미터 |
검색할 값 |
|
검색 시작 인덱스, 디폴트 : 0 |
반환 | 검색된 인덱스 |
var arr = [1, 2, 5, 2, 5];
console.log(arr.indexOf(5));
[실행 결과]
2
var arr = [1, 2, 5, 2, 5];
console.log(arr.indexOf("5"));
[실행 결과]
-1
var arr = [1, 2, 5, 2, 5];
console.log(arr.indexOf(5, 3));
[실행 결과]
4
2. forEach()
구분 | 데이터 (값) |
data | 반복 대상 |
파라미터 |
콜백함수 |
|
this로 참조할 오브젝트opt |
반환 | undefined |
var arr = ["A","B","C"];
arr.forEach(function(el,index,all){
console.log(el + ":" + index + ":" + all);
});
[실행 결과]
A:0:A,B,C
B:1:A,B,C
C:2:A,B,C
var arr = ["A","B","C"];
var fn = function(el,index,all){
console.log(el + ":" + index + ":" + all);
};
arr.forEach(fn);
[실행 결과]
A:0:A,B,C
B:1:A,B,C
C:2:A,B,C
var arr = [1, 2];
var fn = function(el, index, all){
console.log(el + this.num);
};
arr.forEach(fn,{num : 10});
3. filter()
구분 | 데이터 (값) |
data | 반복 대상 |
파라미터 |
콜백함수 |
|
this로 참조할 오브젝트opt |
반환 | [true일 때의 엘리먼트] |
var arr = [10, 20, 30, 40];
var fn = function(el, index, all){
return el > 15;
};
var result = arr.filter(fn);
console.log(result);
[실행 결과]
[20, 30, 40]
4. map()
구분 | 데이터 (값) |
data | 반복 대상 |
파라미터 |
콜백함수 |
|
this로 참조할 오브젝트opt |
반환 | [콜백 함수에서 반환한 엘리먼트] |
var arr = [10, 20, 30];
var fn = function(el, index, all){
return el + this.add;
};
var num = {add: 100};
var result = arr.map(fn, num);
console.log(result);
[실행 결과]
[110, 120, 130]
5. reduce()
구분 | 데이터 (값) |
data | 반복 대상 |
파라미터 |
콜백함수 |
|
초기값opt |
반환 | 콜백 함수에서 반환한 값 |
var arr = [1, 3, 5, 7];
var fn = function(prev, curr, index, all){
console.log(prev + "," + curr);
return prev + curr;
};
var result = arr.reduce(fn);
console.log("결과 : ", result);
[실행 결과]
1, 3
4, 5
9, 7
결과 : 16
var arr = [1, 3, 5];
var fn = function(prev, curr, index, all){
console.log(prev + "," + curr);
return prev + curr;
};
var result = arr.reduce(fn, 7);
console.log("반환 : ", result);
[실행 결과]
7, 1
8, 3
11, 5
결과 : 16
문제 풀이
✏️ 목적
함수 호출 시간 측정
✏️ 요구사항
함수 코드가 없는 빈 함수 작성
함수 이름 : check()
배열에 1부터 1,000,000까지 작성
forEach()
로 배열을 반복하면서 check()
함수 호출
즉 1,000,000번 check()
함수 호출
반복이 끝나면 실행 시간을 출력하세요.
종료 시각 - 시작 시각
✏️ 힌트
현재 시각 구하기 : var start = Date.now();
현재 시각을 1/1000초로 반환
✏️ 풀이 (정답 ❌)
let arr = [];
for (let i = 0; i<1000000;i++){
arr.push(i+1);
}
console.log("<!-- 배열 arr -->",arr);
console.log("arr의 length : ",arr.length);
function check(){};
let start = Date.now();
let fn = function(el,index,all){
check();
}
arr.forEach(fn);
let finish = Date.now();
let result = (finish - start) * 0.001;
console.log("실행 시각 : ",result);
문제만 봤을 땐 어려워보였는데 막상 풀고 나니 금방 풀 수 있었고, 어떻게 forEach를 써야 하는지 확실히 이해할 수 있었다. 역시 이론을 공부하는 것과 코드를 작성하기 위해 공부하는 것은 다르다. 🤓
✏️ 문제 출처
https://www.inflearn.com/course/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EB%B9%84%EA%B8%B0%EB%84%88/dashboard