const arr = [1, 2, 3];
arr[3] = 'test';
arr['property'] = 'string valuse';
arr['obj'] = {};
arr[{}] = [1, 2, 3];
arr['function'] = function () {
return "hello";
}
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]); // 1, 2, 3, test 출력
}
console.log(arr)
/**
[
1,
2,
3,
'test',
property: 'string valuse',
obj: {},
'[object Object]': [ 1, 2, 3 ],
function: [Function (anonymous)]
]
*/
const arr = [1, 2, 3];
console.log(arr.length); // 3
arr.length = 5;
console.log(arr.length); // 5, 자바스크립트에서 배열의 길이는 할당이 가능
arr[9] = 10;
console.log(arr); // [ 1, 2, 3, <6 empty items>, 10 ], 배열이 객체처럼 동작하기 때문에 사이의 값은 빈값으로 할당됨
// 배열의 길이는 할당이 가능해서 배열을 초기화할 때 아래 방법을 사용할 수 있음. (실무에서 이렇게 초기화했었는데, 이유를 알겠다)
arr.length = 0;
console.log(arr); // []
// 간단한 예제
const arr = [1, 2, 3, 4, 5];
let first, second, rest;
[first, second] = arr;
console.log(first); // 1
console.log(second); // 2
[first, second, ...rest] = [1, 2, 3, 4, 5];
console.log(rest); // [ 3, 4, 5 ]
const arrayLikeObject = {
0: "Hello",
1: "World",
length: 2,
}
// 유사 배열 객체를 배열로 변환, 모두 정상적으로 저장됨
const array = Array.from(arrayLikeObject)
console.log(array); // [ 'Hello', 'World' ]
console.log(array.length); // 2
// 배열인지 타입확인
console.log(Array.isArray(arrayLikeObject)); // false
console.log(Array.isArray(array)); // true
// generatePriceList 함수에 parameters가 정의되지 않았지만, arguments 메소드로 대체할 수 있음
const generatePriceList = () => {
for (let index = 0; index < arguments.length; index++) {
const element = arguments[index];
console.log(element); // 100, 200, 300, 400, 500
}
// return arguments.map((arg) => console.log(arg + '원'));
}
generatePriceList(100, 200, 300, 400, 500);
// bad case
const originArray = ['123', '456', '789'];
// newArray에 originArray를 복사를 하는 것이 아니다.
// 단지 originArray의 주소를 newArray가 참조할 뿐이다.
const newArray = originArray;
originArray.push(10);
// 오류, 두 배열의 값이 모두 바뀌어 버림
console.log(originArray); // [ '123', '456', '789', 10 ]
console.log(newArray); // [ '123', '456', '789', 10 ]
// 일반적인 for문을 사용하는 경우
const price = ['2000', '1000', '3000', '5000', '4000'];
const getWonPrice = (priceList) => {
let temp = [];
for (let i = 0; i < priceList.length; i++) {
temp.push(priceList[i] + '원');
}
return temp;
}
console.log(getWonPrice(price)) // [ '2000원', '1000원', '3000원', '5000원', '4000원' ]
// map으로 클린코드
const price = ['2000', '1000', '3000', '5000', '4000'];
const getWonPrice = (priceList) => {
return priceList.map((price) => `${price}원`)
}
console.log(getWonPrice(price)) // [ '2000원', '1000원', '3000원', '5000원', '4000원' ]
// filter를 추가한 예, 요구사항: 1000원 이상만 배열에 저장하라
const price = ['2000', '1000', '3000', '5000', '4000'];
const suffixWon = (price) => `${price}원`;
const isOVerOneThousand = (price) => Number(price) > 1000;
const getWonPrice = (priceList) => {
const isOverList = priceList.filter(isOVerOneThousand);
return isOverList.map(suffixWon);
}
console.log(getWonPrice(price)) // [ '2000원', '3000원', '5000원', '4000원' ]
// 배열 메서드 체이닝과 로직 추가전의 형태
// 리팩토링은 잘되어있으나 로직을 추가하기에 조금 불편해보임
const price = ['2000', '1000', '3000', '5000', '4000'];
const suffixWon = (price) => `${price}원`;
const isOVerOneThousand = (price) => Number(price) > 1000;
const getWonPrice = (priceList) => {
const isOverList = priceList.filter(isOVerOneThousand);
return isOverList.map(suffixWon);
}
console.log(getWonPrice(price)) // [ '2000원', '3000원', '5000원', '4000원' ]
// 배열 메서드 체이닝 적용 후, 로직 추가 형태
const price = ['2000', '1000', '3000', '5000', '4000'];
const suffixWon = (price) => `${price}원`;
const isOVerOneThousand = (price) => Number(price) > 1000;
const descendingList = (a, b) => b - a; // 로직 추가
const getWonPrice = (priceList) => {
return priceList.filter(isOVerOneThousand)
.sort(descendingList) // 로직 추가
.map(suffixWon);
}
console.log(getWonPrice(price)) // [ '5000원', '4000원', '3000원', '2000원' ]
const prices = ['1000', '2000', '3000'];
const newPriceForEach = prices.forEach((price) => {
return price + '원';
})
const newPriceMap = prices.map((price) => {
return price + '원';
})
console.log(newPriceForEach); // undefined
console.log(newPriceMap); // [ '1000원', '2000원', '3000원' ], 새로운 배열을 생성해야하는 경우면 map을 활용
let array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
for (let i = 0; i < array.length; i++) {
if (i === 3) {
console.log(`${array[i]}, breaking the loop`);
break;
}
}
let array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
try {
array.forEach((v, i) => {
if (i === 3) {
throw new Error(`${array[i]}, breaking the loop`)
}
})
} catch (e) {
console.log(e.message)
}
let array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
array.some((v, i) => {
return i === 3 && console.log(`${array[i]}, breaking the loop`)
})
댓글남기기