배열 생성 방법
let array = new Array(2); // 사이즈 전달
console.log(array); // [ 2 empty items]
array = new Array(1, 2, 3); // 실제 아이템 전달
console.log(array); // [ 1, 2, 3 ]
array = Array.of(1,2,3,4,5); // static 함수 이용
console.log(array); // [ 1, 2, 3, 4, 5]
const anotherArray = [1,2,3,4] // 배열 리터럴 이용
console.log(anotherArray); // [ 1, 2, 3, 4]
array = Array.from(anotherArray); //기존의 배열로부터 새로운 배열 만들 때
console.log(array); // [1,2,3,4]
array = Array.from({ // 오브젝트로부터 배열 만들기
0: '안', // 인덱스 키
1: '녕',
length:2,
})
console.log(array); //['안', '녕']
배열 아이템 추가, 삭제
const fruits = ['🍌', '🍎', '🍇', '🍑'];
//배열 아이템을 참조하는 방법
console.log(fruits[0]); // ['🍌']
console.log(fruits[1]); // ['🍎']
console.log(fruits[2]); // ['🍇']
console.log(fruits[3]); // ['🍑']
console.log(fruits.length); // 4
// for 이용해서 출력
for (let i = 0; i<fruits.length; i++){
console.log(fruits[i]);
}
// 추가, 삭제 = 좋지 않은 방식 💩
fruits[6] = '🍓'; //안좋은 방법 빈공간이 생김
console.log(fruits); // ['🍌', '🍎', '🍇', <2 empty items>, '🍑']
delete fruits[1];
console.log(fruits); // [<1 empty items>, '🍎', '🍇', '🍑'];
const fruits = ['🍌', '🍎', '🍇'];
// 특정한 오브젝트가 배열인지 체크
console.log(Array.isArray(fruits)); // true
console.log(Array.isArray()); // false
// 특정한 아이템의 위치를 찾을 때
console.log(fruits.indexOf('🍎')); // 1
// 배열안에 특정한 아이템이 있는지 체크
console.log(fruits.includes('🍎')); // true
//추가 - 제일 뒤
let length = fruits.push('🍑') // 배열 자체를 수정(업데이트)
console.log(fruits); // ['🍌', '🍎', '🍇', '🍑']
console.log(length); // 4
//추가 - 제일 앞
length = fruits.unshift('🍓'); // 배열 자체를 수정(업데이트)
console.log(fruits); // ['🍓', '🍌', '🍎', '🍇', '🍑']
console.log(length); // 5
// 제거 - 제일 뒤
let lastItem = fruits.pop(); // 배열 자체를 수정(업데이트)
console.log(fruits); // ['🍓', '🍌', '🍎', '🍇']
console.log(lastItem); // 🍑
// 제거 - 제일 앞
lastItem = fruits.shift(); // 배열 자체를 수정(업데이트)
console.log(fruits); // [ '🍌', '🍎', '🍇']
console.log(lastItem); 🍓
// 중간에 추가 또는 삭제
// 1번 쩨 인덱스에서 1번째를 삭제
const deleted = fruits.splice(1, 1) // 배열 자체를 수정(업데이트)
console.log(fruits); // [ '🍌', '🍇']
console.log(deleted); // ['🍎']
// 1번째 인덱스에 🍎 ,🍓 추가
fruits.splice(1, 0, '🍎', '🍓') // 배열 자체를 수정(업데이트)
console.log(fruits); [ '🍌', '🍎', '🍓', '🍇']
const fruits = ['🍌', '🍎', '🍇'];
// 잘라진 새로운 배열을 만듬
// 시작하는 인덱스 포함하고 끝나는 인덱스는 제외
let newArr = fruits.slice(0,2);
console.log(newArr); // ['🍌', '🍎'];
console.log(fruits); // ['🍌', '🍎', '🍇'];
newArr = fruits.slice(-1); // 제일 뒤에서 한칸 앞에서 부터
console.log(newArr); // ['🍇'];
// 여러개의 배열을 붙여줌
const arr1 = [1, 2, 3]
const arr2 = [4, 5, 6]
const arr3 = arr1.concat(arr2);
console.log(arr1); // [1, 2, 3]
console.log(arr2); // [4, 5, 6]
console.log(arr3); // [1, 2, 3, 4, 5, 6]
// 순서를 거꾸로
const arr4 = arr3.reverse();
console.log(arr4); // [6, 5, 4, 3, 2]
// 중첩 배열을 하나의 배열로 쫙 펴기
let arr =[
[1,2,3],
[4,[5,6]],
];
console.log(arr); //[[1,2,3],[4,[5,6]]]
// 기본 한 단계 까지만 플랫해줌(지정을 해줘야함)
console.log(arr.flat(2)); // [1, 2, 3, 4, 5, 6]
arr = arr.flat(2)
// 특정한 값으로 배열을 채우기
// 배열 자체를 수정
arr.fill(0)
console.log(arr); // [0, 0, 0, 0, 0, 0]
arr.fill('s', 1, 3)
console.log(arr); // [0, 's', 's', 0, 0, 0]
arr.fill('a', 1)
console.log(arr); // [0, 'a', 'a', 'a', 'a', 'a']
// 배열을 문자열로 합하기
let text = arr.join();
console.log(text); // 0,a,a,a,a,a
text = arr.join('ㅣ');
console.log(text); // 0 ㅣ a ㅣ a ㅣ a ㅣ a ㅣ a
Shllow Copy 얇은 복사
Array.from, concat, slice, spread(...), Object.assign
const pizza = {name: '🍕', price:2, owner: {name:'Ellie'}};
const ramen = {name: '🍜', price:3};
const sushi = {name: '🍣', price:1};
const store1 = [pizza, ramen];
const store2 = Array.from(store1);
console.log('store1',store1);
console.log('store2',store2);
store2.push(sushi)
console.log('store1',store1);
console.log('store2',store2);
pizza.price = 4;
console.log('store1',store1);
console.log('store2',store2);
// 배열을 빙글 빙글 돌면서 원하는것(콜백함수)을 할때
fruits.forEach(function(value, index, array){
console.log('--------');
console.log(value);
console.log(index);
console.log(array);
})
fruits.forEach((value )=> console.log(value));;
const item1 = {name: '🧂', price : 2};
const item2 = {name: '🍘', price : 3};
const item3 = {name: '🍙', price : 1};
const products = [item1, item2,item3,item2];
const found = products.find((value)=> value.name ==='🍘');
console.log(found);
result = products.findIndex((value)=> value.name ==='🍘');
console.log(result);
result = products.some((item)=> item.name==='🍘');
console.log(result);
result = products.every((item)=> item.name==='🍘');
console.log(result);
// 조건에 맞는 모든 아이템들을 새로운 배열로!
result = products.filter((item)=> item.name==='🍘');
console.log(result);
const nums =[1, 2, 3, 4, 5];
result = nums.map(item => item * 2);
console.log(result); //[ 2, 4, 6, 8, 10 ]
result = nums.map((item)=>{
if(item%2 === 0){
return item * 2;
}else{
return item
}
});
console.log(result);//[ 1, 4, 3, 8, 5 ]
result = nums.map((item)=>[1, 2]);
console.log(result);
//[ [ 1, 2 ], [ 1, 2 ], [ 1, 2 ], [ 1, 2 ], [ 1, 2 ] ]
// flatMap: 중첩된 배열을 쫘악 펴줌
result = nums.flatMap((item)=>[1, 2]);
console.log(result);
// [
// 1, 2, 1, 2, 1,
// 2, 1, 2, 1, 2
// ]
result = ['dream','coding'].flatMap((text)=> text.split(''));
console.log(result);
// [
// 'd', 'r', 'e', 'a',
// 'm', 'c', 'o', 'd',
// 'i', 'n', 'g'
// ]
const texts = ['hi','abc']
texts.sort();
console.log(texts); // ['abc', 'hi']
const number = [0, 5, 4, 2, 1 ,10]
number.sort();
// 문자열 형태로 변환이 됨
console.log(number); // [0, 1, 10, 2, 4 ,5]
// a < 0 a가 앞으로 정렬, 오름차순
// a > 0 b가 앞으로 정렬, 내림차순
number.sort((a,b) => a - b); // 기준점을 콜백으로 전달해줘야함
console.log(number); //[ 0, 1, 2, 4, 5, 10 ]
//reduce 배열의 요소들을 접어서 접어서 값을 하나로!
result = [1,2,3,4,5].reduce((sum, value) => (sum+= value),0);
console.log(result); // 15