반응형
순회(iteration)에 관해
순회에 필요한 메서드 map.keys(), map.values(), map.entries() 들은 포괄적인 용도로 만들어져서
메서드를 적용할 자료구조는 일련의 합의를 준수해야 한다.
커스텀 자료구조를 대상으로 순회를 해야 한다면 이 메서드들은 사용하지 못하고 직접 메서드를 구현해야한다.
keys()
, values()
, entries()
를 사용할 수 있는 자료구조
- Map
- Set
- Array
Object.keys, values, entries
일반 객체에도 순회 관련 메서드가 있는데 위의 메서드와 문법에 차이가 있다.
Object.keys(obj) – 객체의 키만 담은 배열을 반환합니다.
Object.values(obj) – 객체의 값만 담은 배열을 반환합니다.
Object.entries(obj) – [키, 값] 쌍을 담은 배열을 반환합니다.
차이점
맵 | 객체 | |
호출 문법 | map.keys() | Object.keys(obj)(obj.keys() 아님) |
반환 값 | iterable 객체 | ‘진짜’ 배열 |
이렇게 문법이 다른 이유는 유연성 때문이다.
자바스크립트에선 복잡한 자료구조 전체가 객체에 기반하는데 객체 data
자체적으로 data.values()
라는 메서드를
구현해 사용하더라도 Object.values(data)
같은 형태로 메서드를 호출할 수 있으면 커스텀 메서드와 내장 메서드 둘 다를 사용할 수 있다.
let user = {
name: "Violet",
age: 30
};
// 값을 순회합니다.
for (let value of Object.values(user)) {
alert(value); // Violet과 30이 연속적으로 출력됨
}
- Object.values를 사용하면 프로퍼티 값을 대상으로 원하는 작업가능
심볼형 프로퍼티 무시
for..in
반복문처럼, Object.keys
, Object.values
, Object.entries
는 키가 심볼형인 프로퍼티를 무시합니다.
심볼형 키만 배열 형태로 반환해주는 메서드인 Object.getOwnPropertySymbols
사용하면 된다.
객체 변환하기
객체->배열, 배열메소드 사용-> 객체
let prices = {
banana: 1,
orange: 2,
meat: 4,
};
let doublePrices = Object.fromEntries(
// 객체를 배열로 변환해서 배열 전용 메서드인 map을 적용하고 fromEntries를 사용해 배열을 다시 객체로 되돌립니다.
Object.entries(prices).map(([key, value]) => [key, value * 2])
);
alert(doublePrices.meat); // 8
반응형