객체 - 객체를 배열로 순회하기
- 데이터 구조에 있어서, 객체 안에 객체, 그 객체 안에 배열 또 배열 안에 객체등 아래 예시와 같은 어지러운 구조가 흔함
const data = {
squadName: 'Super hero squad',
homeTown: 'Metro City',
formed: 2016,
secretBase: 'Super tower',
active: true,
members: [
{
name: 'Molecule Man',
age: 29,
secretIdentity: 'Dan Jukes',
powers: ['Radiation resistance', 'Turning tiny', 'Radiation blast'],
},
{
name: 'Madame Uppercut',
age: 39,
secretIdentity: 'Jane Wilson',
powers: ['Million tonne punch', 'Damage resistance', 'Superhuman reflexes'],
},
{
name: 'Eternal Flame',
age: 1000000,
secretIdentity: 'Unknown',
powers: ['Immortality', 'Heat Immunity', 'Inferno', 'Teleportation'],
},
],
};
객체 - Object.keys()
- Object.keys는 객체의 키들 인자로 넣은 것을 배열로 반환시켜줌, 일반적인 반복문과 동일한 순서로 순회되어 열거를 해 줌
const keys = Object.keys(data);
객체 - Object.values()
- Object.values의 경우 객체를 넣으면 객체의 value의 값을 배열로 반환해서 처리한다는 의미(값들을 배열에 담아서 반환해줌)
const values = Object.values(data);
객체 - Object.entries()
- 마찬가지로 객체를 인자로 받고, [key, value]쌍의 배열로 반환을 함
- 배열 안의 배열로 [['key', 'value'], ['key', 'value']]로 순차적으로 데이터를 담아서 반환함
const entries = Object.entries(data);
['homeTown', 'Metro City'],
....
]
배열 - 요소 추가와 제거
- 배열안에 있는 하나하나의 인덱스와 그 값들이 요소들임, 그래서 아래 예시와 같이 처리할 수 있음
const arr = ['one', 'two', 'three']
arr.push(1)
arr.push(2)
arr.unshift(0)
arr.unshift(-0)
arr.pop()
arr.pop()
arr.shift()
arr.shift()
arr.splice(0, 0, 'four')
arr.splice(0, 1, 'four')
arr.splice(1, 0, 'four')
arr.splice(1, 1, 'four')
- 위의 메소드들의 단점은 원본 배열을 계속 건드린다는 점임
const arr = ['one', 'two', 'three']
const copyArr = arr;
arr.push(0)
arr.unshift(10)
arr.splice(1, 1, 'four')
copyArr;
배열 - 요소 병합
concat
메소드를 통해서 인자로 주어진 배열이나 값을 기존 배열에 합쳐서 새 배열로 반환함
- 즉, 원본 배열이 훼손된다고 했는데 이 원본 배열을 유지할 수 있다는 것
const array = ['JS', 'HTML', 'CSS'];
const newArr = array.concat(['TS', 'Java'])
array
newArr
const newArr = ['TS', 'Java'].concat(array);
- 혹은 배열 구조 분해를 통해서 값을 쉽게 추가할 수도 있음, 아래와 같이 해도 원본 배열은 유지하고 그 원본 배열의 값을 그대로 복사해서 처리함
const newArr = [ ...array, 'TS', 'Java']
const newArr = ['TS', 'Java', ...array];
const array = ['JS', 'HTML', 'CSS']
const other = ['TS', 'Java']
const newArr = [...array, ...other];
배열 - 고차 함수로 조작(내장 메서드)
- 배열 메서드가 매우 많은데, 고차함수처럼 쓸 수 있는 것 위주로 알아볼 것임
map
, filter
, reduce
임
- map의 경우 forEach와 유사하게, 배열 요소마다 해당 아래 function이 자동으로 실행되는 것임
const lang = ['JS', 'HTML', 'CSS'];
const newLangs = langs.map(function(lang) {
return lang + ' 언어'
})
const langs = ['JS', 'HTML', 'CSS', 0, 1, 2, 3];
const numbers = langs.filter(function(el) {
if (typeof el === 'number') {
return el
}
})
numbers
const strings = langs.filter(function(el) {
if (typeof el === 'string') {
return el
}
})
strings;
const strings = langs.filter((el) => (typeof el === 'string'))
const isNumber = function (el) {
if (typeof el === 'number') {
return true;
}
};
const numbers = langs.filter(isNumber);
- 배열의 인자로 함수를 넘겨서 처리하는 것을 고차함수로 조작한다고 볼 수 있음
reduce
는 누적된 값을 반환하는데 유용함, 함수를 인자로 넣고 마지막 인자로 초기값을 넣어서 쓸 수 있음
function sumTotal(...numbers) {
return numbers.reduce(function(total, current) {
return total + current
}, 0)
}
function sumTotal(...numbers) {
return numbers.reduce((total, current) => total + current, 0)
}
sumTotal(1,2,3,4,5,6,7)
배열 - 요소 정렬
sort
메소드를 통해서 아래와 같이 요소를 정렬 할 수 있음(문자열, 숫자 정렬 용이함)
const numbers = [4, 2, 5, 1, 3];
const orderNumbers = numbers.sort(function(a, b) {
return a - b;
})
const strings = ['마', '가', '라', '나', '다'];
const orderStrings = strings.sort(function(a, b) {
return a.localeCompare(b);
}
const orderNumbers = numbers.sort((a, b) => b.localeCompare(a))
const 내림차순 = (a, b) => b.localeCompare(a);
const orderNumbers = numbers.sort(내림차순);
배열 - 값 검색
- 아래와 같이 내장 메소드를 활용해서 배열 내의 값이 있는지 다양하게 확인할 수 있음
const members = ['kevin', 'zero', 'base', 'oh']
const result = members.find(function(member) {
return member === 'zero'
})
const result = members.findIndex(function(member) {
return member === 'zero'
})
const result = members.indexOf(function(member) {
return member === 'zero'
})
const result = members.lastIndexOf(function(member) {
return member === 'zero'
})
const result = members.includes('zero');