Notice
Recent Posts
Recent Comments
Link
«   2025/11   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
Tags
more
Archives
Today
Total
관리 메뉴

Dev

ES6 (4) : Array Method 본문

Programming/Java Script

ES6 (4) : Array Method

flutterbylily 2023. 3. 21. 11:00

8) 배열 함수

 

(1) forEach()

반복문의 순번(i++)과 배열의 크기를 따로 선언하는 과정을 생략할 수 있음.

forEach()가 내장함수이므로 속도 부분으로는 for()보다 더 빠르다.

* 반환값이 없어도 됨

 

  • 문법
arr.forEach(callback(currentValue[, index[, array]])[, thisArg])

- callback: 각 요소를 실행할 함수, currentValue와 index, array 세 가지 매개변수를 받음.

    - currentVaule: 처리할 현재요소

    - index: 처리할 현재 요소의 index.

    - array: forEach()를 호출한 배열.

- thisArg: callback을 실행할 때 this로 사용하는 값

 

 

forEach()를 사용한 코드(1):

const arr = [1, 2, 3, 4, 5];
const odd = [];

arr.forEach(function(num){
	if(num%2 == 1) {
    	odd.push(num);
    }
});

console.log(odd);		// [1, 3, 5]

 

forEach()를 사용한 코드(2):

const useQuery = "a=1,b=2,c=3"

function parser(qs) {

    const queryString = qs.substr(0);				
    const splitedStr = queryString.split(',');		//splitedStr=['a=1','b=2','c=3']
    let result = {};
    
    splitedStr.forEach((str) => {
        const [key, value] = str.split('=');
        result[key]=value;
    });
    return result;
}
console.log(parser(useQuery));

// {a: '1', b: '2', c: '3'}

 

 

(2) map()

배열 요소를 정의된 함수를 통해 새 배열을 만드는 함수.

※ 반환값 필요.

  • 문법
arr.map(callback(currentValue[, index[, array]])[, thisArg])

- callback: 배열의 모든 요소에 적용되어 새 배열 요소를 생성.

    - currentVaue: callback이 적용될 현재 요소

    - index: 처리할 현재 요소의 index

    - array: map()를 호출한 배열

- thisArg: callback을 실행할 때 this로 사용하는 값

 

 

map()을 사용한 코드(1):

const arr1 = [1, 2, 4, 8];
const doubleArr = numbers.map((arr1) => {
	return arr1 * 2;
});
console.log(doubleArr);		// [2, 4, 8, 16]

 

map()을 사용한 코드(2):

const useQuery = "a=10,b=20,c=30"
function parser(qs) {
    const queryString = qs.substr(0);		// queryString = a=10,b=20,c=30"
    const splitedStr = queryString.split(',');		// splitedStr = ['a=10', 'b=20', 'c=30']
    
    const result = splitedStr.map((str) => {
    	const [key, value] = str.split('=');	
        return {key: key, value: value};		// {key: 'a', value: '10'}
    });
    return result;
}

console.log(parser(useQuery));

/* result = [
   	{key: 'a', value: '10'},
        {key: 'b', value: '20'},
        {key: 'c', value: '30'}
   ];
*/

 

 

(3) reduce()

배열의 요소를 순차적으로 순회하며 reducer 함수를 실행하고 하나의 결과값을 반환,

그 결과값은 객체나 배열, 스트링 등이 될 수 있음

 

  • 문법
arr.reduce(callback[, initialValue])

- callback: 배열의 각 요소에 대해 실행, 네 가지 인수를 받음.

    - accumlator(누적값): 누산기. callback의 반환값을 누적.

    - currentValue(현재값): 처리할 현재 요소

    - currentIndex(현재 인덱스): 처리할 현재 요소의 index(initialValue를 제공한 경우: 0, 아니면 1부터 시작)

    - array(현재 배열): reduce()를 호출한 배열.

- initialValue(초깃값): callback의 최초 호출에서 첫 번째 인수에 제공하는 값

 

🌟 reduce의 accumulator와 currentValue

 

    ① accumulator(누적값)

        accumulator는 callback의 반환값을 누적하는데, 이 누적값이 없거나 초깃값을 제공한 경우

        initialValue(초깃값)로 시작함. 

 

    ② initialValue(초깃값)

        initialValue를 설정하지 않았을 경우: accumulator가 배열의 0번째 index, currentVaule가 첫 번째 index

        initialValue를 설정한 경우: accumulator가 initialValue, currentVaule가 0번째 index

        즉, reduce가 순회하면서 accumulator에 반환값을 누적시키며 하나의 값을 리턴.

       

* 배열이 비어있는데 초깃값을 제공하지 않을 경우: 에러 발생

 

 

reduce()를 사용한 코드(1):

const arr = [1, 2, 3, 4, 5];
const initialValue = 0;

const reduceArr = arr.reduce((accumulator, currentValue) => 
	accumulator + currentValue, initialValue
);

console.log(reduceArr);		// 15

 

reduce()를 사용한 코드(2):

const useQuery = "a=1&b=3&c=5"
function parser(qs) {
    const queryString = qs.substr(0);		// queryString = a=1&b=3&c=5"
    const splitedStr = queryString.split('&');		// splitedStr = ['a=1', 'b=3', 'c=5']
    
    return splitedStr
    	.map((str) => {
    		const [key, value] = str.split('=');
        	return {key, value};			
    	})
    	.reduce((result, arr) => {
    		result[arr.key] = arr.value;
        	return result;
    	}, {});
    
}

console.log(parser(useQuery));

// {a: '1', b: '3', c: '5'}

 

'Programming > Java Script' 카테고리의 다른 글

ES6 (3) : Promise  (1) 2023.03.17
ES6 (2)  (0) 2023.03.14
ES6 (1)  (0) 2023.03.13