본문 바로가기
JavaScript

Array 배열

by 메씨 2023. 6. 15.
728x90
반응형

배열의 추가, 삭제 push, pop, shift, unshift, splice

let arr = [1, 2, 3, 4, 5];

1. 배열의 뒤에 추가, 삭제

arr.push() 배열의 맨 뒤에 요소를 넣는다.

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

arr.pop() 배열의 맨 뒤의 요소를 하나만 삭제한다.

let el =arr.pop();
 console.log(arr, el);//[1, 2, 3, 4, 5, 6, 7] 8let arr =[1,2,3,4,5];

2. 배열의 앞에 추가, 삭제

shift의 리턴값 => 빼낸 값

arr.unshift() 배열의 맨 앞에 요소를 넣는다.

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

arr.shift() 배열의 맨 앞의 요소를 하나만 삭제한다.

el = arr.shift();
console.log(arr,el);//[2, 3, 1, 1, 2, 3, 4, 5, 6, 7] 1

3. 배열의 중간에 추가, 삭제

삭제와 추가를 동시에 할 수 있다. splice의 리턴값 => 삭제된 배열

splice() 배열의 중간에 요소를 넣는다.

 💡 arr.splice(처리할 idx, 삭제할 index의 개수, 추가할 값(복수 가능)

 

arr = [1,2,3,4,5];
 arr.splice(2,0,9,10);//(작업할 인덱스, 삭제할 개수, 추가할 요소...)
 console.log(arr);//[1, 2, 9, 10, 3, 4, 5]

배열의 복사 slice

배열에서 원하는 값을 복사해 온다.

arr.slice(idx,idx)

//deep copy
 //두번째 인자값이 없을 경우=> 모든 값 
 arr = [1,2,3,4,5];
 let arr2 = arr.slice(1,4);//(시작할 인덱스, 끝날 인덱스(끝 인덱스 비로 직전까지 슬라이스))
 console.log(arr2);//[2, 3, 4]

배열의 병합 concat

배열을 병합해준다.

arr.concat()

arr = [1,2,3,4,5];
 arr2 = [6,7,8,9,10];
 let arr3 = arr.concat(arr2);
 console.log(arr3,arr,arr2);
 //[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
 //[1, 2, 3, 4, 5] 
 //[6, 7, 8, 9, 10]

문자열→배열 split

규칙이 있는 문자열을 배열로 전환

arr.split()

  • 예) 고객의 주문을 하나의 문자열로 저장하여 전달→ 배열로 다시 바꾼다.
let str = 'A B C,D,E';
 arr = str.split(',');
 console.log(arr);//['A B C', 'D', 'E']

 //예)고객의 주문을 하나의 문자열로 저장하여 전달하고 배열로 다시 바꾼다.
  str = '11|2|100|red^11|1|95|blue^17|1||blue';
	let order = str.split('^');
	let order2 = [];
	console.log(order);
	order.forEach(function(v, i){
		order2[i] = v.split('|');	// 배열안에 배열을 넣는다.
	});
	console.log(order2);
	console.log(order2[1][3]);

배열→문자열 join

배열을 규칙이 있는 문자열로 전환

arr.join()

arr = [1,2,3,4,5];
str = arr.join(',');
console.log(str);//1,2,3,4,5

배열의 정렬 sort, reverse

1. 정렬

arr.sort()

arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
arr.sort();
console.log(arr)//[1, 10, 2, 3, 4, 5, 6, 7, 8, 9]
  • 오름차순
arr.sort(function(a, b) {
    	return a - b;	//오름차순
});
console.log(arr)//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let user = [
    { id: 1, name: '맥스', height: 175, weight: 78 },
	{ id: 2, name: '비비', height: 145, weight: 72 },
	{ id: 3, name: '미미', height: 165, weight: 88 },
	{ id: 4, name: '제이', height: 185, weight: 92 },
	{ id: 5, name: '크롱', height: 195, weight: 68 }
]
user.sort( 
	function(a, b) {
		return  a.weight - b.weight;
	}
)
console.log(user);
/*
0: {id: 5, name: '홍길룡', height: 195, weight: 68}
1: {id: 2, name: '홍길만', height: 145, weight: 72}
2: {id: 1, name: '홍길동', height: 175, weight: 78}
3: {id: 3, name: '홍길이', height: 165, weight: 88}
4: {id: 4, name: '홍길순', height: 185, weight: 92}
*/
  • 내림차순
arr.sort(function(a, b) {
    	return b - a;	//내림차순
});
console.log(arr)//[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

2. 역순

arr.reverse()

arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
arr.reverse();	// 배열을 뒤집는다.
console.log(arr) //[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

배열의 반복 forEach, map, reduce

👉🏻 for(), for(let i in arr)은 배열의 메서드가 아닌 반복문이다!!

 

1. 배열에 있는 각 요소에 대해 실행

arr.forEach()

forEach()는 주어진 callback을 배열에 있는 각 요소에 대해 오름차순으로 한 번씩 실행한다. 삭제했거나 초기화하지 않은 인덱스 속성에 대해서는 실행하지 않는다.

callback은 다음 세 인수와 함께 호출됩니다.

arr.forEach(callback(currentvalue[, index[, array]])[, thisArg])

  • callback 각 요소에 대해 실행할 함수
  • currentvalue 처리할 현재 요소
  • index 처리할 현재의 인덱스
  • array forEach를 호출한 배열
  • thisArg을 실행할 때  this로 사용할 값.
arr = [1,2,3,4,5];
let squared = [];
arr.forEach(function(v,i){
    squared[i] = v * v;
})
console.log(squared);//[1, 4, 9, 16, 25]

2.

arr.map()

arr = [1,2,3,4,5];
squared=arr.map(function(v,i){
     return v * v;
})
console.log(squared)//[1, 4, 9, 16, 25]

3.

arr.reduce()

arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
	let sum = arr.reduce(function(prev, curr, idx) {
		return prev + curr
	});
	console.log(sum);//55

	 user = [
		{ id: 1, name: '민지', height: 175, weight: 78 },
		{ id: 2, name: '유진', height: 145, weight: 72 },
		{ id: 3, name: '선호', height: 165, weight: 88 },
		{ id: 4, name: '지유', height: 185, weight: 92 },
		{ id: 5, name: '재오', height: 195, weight: 68 }
	];
	let userSum = user.reduce(function(prev, curr, idx) {
		curr.name = '총합';
		curr.height = prev.height + curr.height;
		curr.weight = prev.weight + curr.weight;
		return curr;
	});
	console.log(userSum);//{id: 5, name: '총합', height: 865, weight: 398}

배열의 필터링 filter(), every(), some(), reduce()

1. 원하는 값만 추출하여 새로운 배열로 리턴

array.filter()

user = [
		{ id: 1, name: '민지', height: 175, weight: 78 },
		{ id: 2, name: '유진', height: 145, weight: 72 },
		{ id: 3, name: '선호', height: 165, weight: 88 },
		{ id: 4, name: '지유', height: 185, weight: 92 },
		{ id: 5, name: '재오', height: 195, weight: 68 }
	];
var over170 = user.filter(function(v, i) {
		return v.height >= 170 ? true : false;
	});
	console.log(over170);
//0: {id: 1, name: '민지', height: 175, weight: 78}
//1: {id: 4, name: '지유', height: 185, weight: 92}
//2: {id: 5, name: '재오', height: 195, weight: 68}

2. 모든 값이 조건에 맞아야 ture 리턴

array.every()

user = [
		{ id: 1, name: '민지', height: 175, weight: 78 },
		{ id: 2, name: '유진', height: 145, weight: 72 },
		{ id: 3, name: '선호', height: 165, weight: 88 },
		{ id: 4, name: '지유', height: 185, weight: 92 },
		{ id: 5, name: '재오', height: 195, weight: 68 }
	];
	var all170 = user.every(function(v, i) {
		return v.height >= 170;
	});
	console.log(all170);//false

3. 하나라도 조건에 맞으면 true 리턴

array.some()

user = [
		{ id: 1, name: '민지', height: 175, weight: 78 },
		{ id: 2, name: '유진', height: 145, weight: 72 },
		{ id: 3, name: '선호', height: 165, weight: 88 },
		{ id: 4, name: '지유', height: 185, weight: 92 },
		{ id: 5, name: '재오', height: 195, weight: 68 }
	];
var one170 = user.some(function(v, i) {
		return v.height >= 170;
	});
	console.log(one170);//true
728x90
반응형

'JavaScript' 카테고리의 다른 글

colors[Math.floor(Math.random() * colors.length)];랜덤값 출력하기  (0) 2023.06.18
삼항 연산자 ternary  (0) 2023.06.17
JavaScript 란?  (0) 2023.06.15
JavaScript 출력  (0) 2023.06.14
Javascript 규칙  (0) 2023.06.14

댓글