[JS]Object.keys, values, entries

Object.keys, values, entries   对于普通对象,下列这些方法是可用的:           Object.keys(obj) —— 返回一个包含该对象所有的键的数组。         Object.values(obj) —— 返回一个包含该对象所有的值的数组。         Object.entries(obj) —— 返回一个包含该对象所有 [key, value] 键值对的数组。  

 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}

 

    

相关文章