https://ko.javascript.info/keys-values-entries
keys(), values(), entries()는 Map, Set, Array 자료구조에서 사용할 수 있다.
일반 객체에서는 아래와 같은 메서드를 사용할 수 있다.
Object.keys(obj) – 객체의 키만 담은 배열을 반환
Object.values(obj) – 객체의 값만 담은 배열을 반환
Object.entries(obj) – [키, 값] 쌍을 담은 배열을 반환
map.keys() => iterable 객체를 반환
object.keys(obj) => 진짜 배열을 반환
(obj.keys() 아님!)
위처럼 반환 형태가 다른 이유는 하위 호환성 때문.
위 세 메서드는 심볼형 키는 무시하는데 심볼형 키가 필요한 경우엔 심볼형 키만 배열 형태로 반환해주는 메서드인 Object.getOwnPropertySymbols를 사용하면 된다. getOwnPropertySymbols 이외에도 키 전체를 배열 형태로 반환하는 메서드인 Reflect.ownKeys(obj)를 사용해도 괜찮다.
map과 filter는 배열 전용 메서드로 객체에는 사용이 불가능한데 Object.entries와 Object.fromEntries를 순차적으로 적용하면 객체에도 배열 전용 메서드 사용할 수 있다.
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