순회에 필요한 메서드 map.keys()
, map.values()
, map.entries()
를 알아보았다.
이 메서드들은 포괄적인 용도로 만들어졌고, 이것들을 사용할수 있는 3개의 자료구조가 있다.
앞서 배웠던 map, set에 사용되었던 메서드들이다.
하지만, 일반 객체에도 순회 관련 메서드가 있긴하다.
문법이 조금 다르지만 같은 이름을 가진 메서드가 구현되어있다.
Object.keys
- 키만을 가진 배열 리턴Object.values
- 값만 담은 배열 리턴Object.entries
- 키와 값을 쌍인 배열 리턴우선 Map
, Set
, Array
에 사용되는 메서드와 차이점은 아래와 같다.
let user = {
name: 'quakka',
age: 29,
};
Object.keys(user); // ['name', 'age']
Object.values(user); // ['quakka', 29]
Object.entries(user); // [ ['name', 'quakka'], ['age', 29] ]
* 심볼형 프로퍼티는 무시된다
위의 메서드들은 심볼형인 프로퍼티는 무시가 된다.
하지만 심볼형을 읽어올 수 있는 두가지 메서드가 존재한다.
1. Object.getOwnPropertySymbols -> 심볼형 키만을 리턴
2. Object.ownKeys(obj) -> 심볼형을 포함한 전체 키를 리턴
객체에는 map
, filter
, reduce
등의 고차함수를 사용하는 메서드가 있다.
하지만 Object.entries
와 Object.fromEntries
를 순차적으로 적용한다면 객체에도 배열 전용 메서드를 사용할 수 있다.
Object.entries(obj)
를 사용해 객체의 키값을 쌍으로 하는 요소를 가진 배열은 얻는다.map
, filter
등의 메서드를 적용한다.Object.fromEntries(array)
를 적용해 다시 객체로 되돌린다.let prices = {
banana: 1000,
orange: 2000,
meat: 4000,
};
let objectToArray = Object.entries(prices);
let mappingOfArray = objectToArray.map(([key, value]) => [key, value * 2]);
let arrayToObject = Object.fromEntries(mappingOfArray);
for(let key of Object.keys(arrayToObject)) {
console.log(arrayToObject[key]); // 2000, 4000, 8000
}