[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}

 

    
posted @ 2020-03-03 11:48  冯风风  阅读(572)  评论(0编辑  收藏  举报