1 let obj = { 2 name: "jack", 3 age: 20, 4 sex: "man", 5 } 6 7 let keys = Object.keys(obj); 8 console.log(keys); // ["name", "age", "sex"] 9 10 let values = Object.values(obj); 11 console.log(values); // ["jack", 20, "man"] 12 13 let entries = Object.entries(obj); 14 console.log(entries); // [ ["name", "jack"], ["age", 20], ["sex", "man"] ] 15 // 返回值均为数组
与 Map Set 方法的区别
写法不同:map.keys() 返回值的区别:Object.* 方法返回的是“真正的”数组对象,而不只是一个可迭代项。
1 let map = new Map([ 2 ['cucumber', 500], 3 ['tomatoes', 350], 4 ['onion', 50], 5 ]); 6 7 console.log(map); // {"cucumber" => 500, "tomatoes" => 350, "onion" => 50} 8 9 // 返回可迭代项 10 let mapKeys = map.keys(); 11 console.log(mapKeys); // {"cucumber", "tomatoes", "onion"} 12 console.log(Object.keys(map)); // [] 13 14 let mapValues = map.values(); 15 console.log(mapValues); // {500, 350, 50} 16 console.log(Object.values(map)); // [] 17 18 let mapEntries = map.entries(); 19 console.log(mapEntries); // {"cucumber" => 500, "tomatoes" => 350, "onion" => 50}
Object.keys/values/entries 会忽略 symbol 属性 如果我们也想要 Symbol 类型的键,可以使用方法 Object.getOwnPropertySymbols,它会返回一个只包含 Symbol 类型的键的数组。另外,还有一种方法 Reflect.ownKeys(obj),它会返回所有键。
1 let john = Symbol("human"); 2 let apple = Symbol("fruit"); 3 let obj1 = { 4 [john]: "human", 5 cat: "animal", 6 [apple]: "fruit", 7 } 8 console.log(obj1); // {cat: "animal", Symbol(human): "human", Symbol(fruit): "fruit"} 9 10 let obj1Keys = Object.keys(obj1); 11 console.log(obj1Keys); // ["cat"] 会忽略 symbol 属性 12 13 let obj1Symble = Object.getOwnPropertySymbols(obj1); 14 console.log(obj1Symble); // [Symbol(human), Symbol(fruit)] 15 16 let obj1Symbles = Reflect.ownKeys(obj1); 17 console.log(obj1Symbles); // ["cat", Symbol(human), Symbol(fruit)] 返回所有键的数组
转换对象
对象缺少数组存在的许多方法,例如 map 和 filter 等。如果我们想应用它们,那么我们可以在 Object.entries 之后使用 Object.fromEntries:
使用 Object.entries(obj) 从 obj 获取由键/值对组成的数组。 对该数组使用数组方法,例如 map。 对结果数组使用 Object.fromEntries(array) 方法,将结果转回成对象。
1 let prices = { 2 banana: 3, 3 orange: 2, 4 meat: 7, 5 } 6 7 let newPrices = Object.fromEntries( 8 Object.entries(prices).map(( [key, value] ) => [key, value * 2] ) 9 ) 10 console.log(newPrices); // {banana: 6, orange: 4, meat: 14}