관리 메뉴

프로그래밍 삽질 중

slice, concat, forEach + 원본을 바꾸는 매서드, 바꾸지 않는 매서드 본문

과거 프로그래밍 자료들/Javascript&typescript

slice, concat, forEach + 원본을 바꾸는 매서드, 바꾸지 않는 매서드

평부 2022. 7. 20. 17:48

*출처 : https://ko.javascript.info/array-methods

 

배열과 메서드

 

ko.javascript.info

 

* arr.slice([start], [end])

- start 인덱스부터 end 인덱스까지의 요소를 복사한 새로운 배열 반환

- start, end가 둘 다 음수 일때 배열 끝에서 요소 개수 의미

- str.slice와 유사한데 차이점 : 서브 배열(subarray) 배열 반환

- arr.slice()는 인수를 하나도 넘기지 않고 호출하여 arr의 복사본을 만들 수 있음

 

let arr = ['t', 'o', 'p', 'g', 'u', 'n'];

console.log(arr.slice(1, 3)); //['o', 'p']
console.log(arr.slice(-2)); //['u', 'n']

 

* arr.concat(arg1, arg2...);

- 기존 배열의 요소를 사용해 새로운 배열을 만들거나 기존 배열에 요소를 추가할 때 사용

- concat 메서드는 배열의 모든 요소를 복사하고 item을 추가해 새로운 배열을 만든 후 이를 반환

- arg1, arg2가 배열이면 이 배열의 인수를 기존 배열에 더함

 

let arr = [1, 2];

console.log(arr.concat([3, 4])); //[,1, 2, 3, 4];
console.log(arr.concat([3, 4], [5, 6]); //[,1, 2, 3, 4, 5, 6];
console.log(arr.concat([3, 4], 5, 6)); //[,1, 2, 3, 4, 5, 6];

 

 

* arr.forEach()

- 주어진 함수를 배열 요소 각각에 대해 실행할 수 있게 해줌(반복문 같음)

- arr.forEach(function(item, index, arr) {}

 

const arr = ['topgun', 'navy', 'captin', 'maverick'];

arr.forEach((item, index, array) => {
    console.log(`item : ${item} / index: ${index} / array : ${array[index]}`);
});

//결과
item : topgun / index: 0 / array : topgun
item : navy / index: 1 / array : navy
item : captin / index: 2 / array : captin
item : maverick / index: 3 / array : maverick

 

* arr.includes(item, from)

- 인덱스 from 부터 시작해 item이 있는지 검색하는데 해당 요소를 발견하면 숫자로 반환

- 요소의 위치를 정확히 알고 싶은 게 아니라 요소가 배열 내에 존재하는 지 여부만 확인

let topGun1 = ['maverick', 'goose', 'iceman'];
let topGun2 = ['maverick', 'iceman'];

console.log(topGun1.indexOf('maverick')); //0 (true)
console.log(topGun2.indexOf('goose')); //-1 (false)

 

 

* 원본을 바꾸지 않는 배열 매서드

= concat, slice, every, map, find, findIndex, includes

 

* 원본을 바꾸는 배열 매서드

= push, pop, unshift, shift, splice, sort

 

 

* 카드 뒤집기에서 slice, concat, forEach 사용

//concat
const total = 12;
const colors = ['red', 'orange', 'yellow', 'green', 'white', 'pink'];
let colorCopy = colors.concat(colors);

console.log(colorCopy); //2개씩 뒤집기 위해 colors는 6가지지만 colorCopy는 12개

//concat & splice
const shuffled = [];
const colors = ['red', 'orange', 'yellow', 'green', 'white', 'pink'];
let colorCopy = colors.concat(colors);

for(let i=0; colorCopy.length > 0; i+= 1) {
	const randomIndex = Math.floor(Math.random() * colorCopy.length);
    shuffled = shuffled.concat(colorCopy.splice(randomIndex, 1));
}

console.log(shuffled); //12개의 색상값들이 랜덤하게 섞임


//forEach
document.querySelectorAll('.card').forEach((card, index) => {
	setTimeout(() => {
    	card.classList.add('flipped'); //flipped 부분은 css 부분
    }, 1000 + 100 * index); //1초 -> 1.1초 -> 1.2초 ...
})

setTimeout(() => {
	document.querySelectorAll('.card').forEach((card) => {
    	card.classList.remove('flipped');
    })
}, 5000);