第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開發(fā)者教程

ES6+ Object.entries()

1. 前言

前兩節(jié)我們學習了獲取可枚舉對象上屬性和屬性值作為一個數(shù)組的方法 Object.keys()Object.values(),但是我們想把鍵值對同時獲取到怎么辦呢?這時 ES6 提供了 Object.entries() 方法用于獲取可枚舉對象上的屬性和值的數(shù)組。

2. 方法詳情

Object.entries() 會返回一個二維數(shù)組,數(shù)組中的每一項是可枚舉對象上的屬性和值的數(shù)組。

2.1 語法使用

Object.entries(obj);
參數(shù) 描述
obj 可以返回其枚舉自身屬性和鍵的對象

2.2 基本使用

返回結(jié)果是一個二維數(shù)組,數(shù)組中的每個元素是一個包含兩個元素的數(shù)組,第一個元素是屬性,第二個元素是屬性對應(yīng)的值。

var obj = {a: 1, b: 2, c: 3};
console.log(Object.entries(obj))
// [['a', 1], ['b', 3], ['c', 3]]

如果傳入的參數(shù)是數(shù)字或布爾值時,則返回一個空數(shù)組

Object.entries(50)       // []
Object.entries(false)    // []

values() 返回數(shù)組的順序,會按照屬性的數(shù)值大小,從小到大排序。

var obj = {10: 'a', 1: 'b', 7: 'c'};
console.log(Object.entries(obj))
// [["1", "b"], ["7", "c"], ["10", "a"]]

上面的代碼中,屬性名為數(shù)值的屬性,是按照數(shù)值大小,從小到大遍歷的,因此返回值是一個排序后的二維數(shù)組。

values() 傳入的對象如果是一個字符串時,則會把字符拆成數(shù)組中的單個項,如下:

console.log(Object.entries('abc'))
// [["0", "a"], ["1", "b"], ["2", "c"]]

3. 案例

3.1 用于 for…of 循環(huán)獲取對象上的鍵值對

Object.entries() 在開發(fā)中有很好的用途,可以同時獲取對象的鍵值對進行使用。

其實像使用 Object.keys()、 Object.values()Object.entries() 都是為了遍歷對象,然后對對象中的元素進行操作,下面我們來看一下 Object.entries() 在 for 循環(huán)中的使用。

var obj = { name: 'imooc', age: 7, lesson: 'ES6 Wiki' };
for (let i = 0; i < Object.entries(obj).length; i++) {
  var [key, value] = Object.entries(obj)[i]
  console.log(key, value);
}

上面的代碼中我們可以看出,在循環(huán)體內(nèi)可以通過結(jié)構(gòu)的方式獲取對象的屬性和值。使用 for 循環(huán)時我們要對循環(huán)的每一步進行處理。

在下面的章節(jié)中我們會學到 for...of 循環(huán),它的功能強大,能遍歷可迭代的對象,可以替代 forforEach 等循環(huán),并具有擴展性。

let obj = { name: 'imooc', age: 7, lesson: 'ES6 Wiki' };

for (let [key, value] of Object.entries(obj)) {
  console.log(`${key}: ${value}`);
}
// name: imooc
// age: 7,
// lesson: ES6 Wiki

上面的代碼中,我們不用在 for 循環(huán)中處理每一項,可以在循環(huán)時直接解構(gòu)出 Object.entries() 的值。這樣就可以遍歷出對象的鍵值對。

3.2 把對象轉(zhuǎn)為 Map 結(jié)構(gòu)

Object.entries() 還有一個最重要的功能,就是可以把指定的對象直接轉(zhuǎn)化成 ES6 的 Map 數(shù)據(jù)結(jié)構(gòu)。

ES6 提供了新的 Map 數(shù)據(jù)結(jié)構(gòu),它類似于對象,也是鍵值對的集合,但是 Map 的鍵可以是任意類型(原始類型和對象類型),并且提供了 set 、 get 方法去設(shè)置和獲取對象的值。如果想把一個對象轉(zhuǎn)為 Map 結(jié)構(gòu),可以借助 Object.entries() 來實現(xiàn)。

var obj = { name: 'imooc', age: 7 };
var map = new Map(Object.entries(obj));
console.log(map)            // Map(2) {"name" => "imooc", "age" => 7}
console.log(map.get(name))  // imooc

上面的代碼中,很好地把已有的對象,轉(zhuǎn)化為 Map 對象,而且可以使用 Map 的方法獲取對象上的數(shù)據(jù)。

4. Object.fromEntries()

Object.fromEntries()Object.entries() 的反轉(zhuǎn)函數(shù),這樣理解起來就比較輕松。它接收的是一個可迭代的對象,類似 Array、Map 或者其它實現(xiàn)了可迭代協(xié)議的對象,結(jié)果返回一個新的對象。

4.1 數(shù)組轉(zhuǎn)化為對象

將一個帶有鍵值對的數(shù)組轉(zhuǎn)化成對象。

var arr = [ ['a', '0'], ['b', '1'], ['c', '2'] ];
var obj = Object.fromEntries(arr);
console.log(obj); // {a: "0", b: "1", c: "2"}

上面的代碼中,arr 是一個二維數(shù)組,子數(shù)組中的每一個項包含鍵和值,只有這樣的數(shù)組類型才可以轉(zhuǎn)化為對象。

4.2 Map 轉(zhuǎn)化為對象

Object.fromEntries() 可以直接將 Map 結(jié)構(gòu)的對象轉(zhuǎn)化為一個正常的對象,在開發(fā)中是一個非常常用的方法。

var map = new Map();
map.set('name', 'imooc');
map.set('age', 7);
console.log(map);     // Map(2) {"name" => "imooc", "age" => 7}
var obj = Object.fromEntries(map);
console.log(obj);     // {name: "imooc", age: 7}

上面的代碼中,先定義一個 Map 數(shù)據(jù)結(jié)構(gòu),并給 map 添加 nameage 兩個屬性,然后使用 Object.fromEntries() 方法對 map 進行操作,最后可以得到一個對象。

4. 小結(jié)

本節(jié)主要講解了 ES6 提供了獲取可枚舉對象上的鍵值對的方法,這個方法在開發(fā)中很常用,主要用于 for...of 循環(huán)和 Map 數(shù)據(jù)結(jié)構(gòu)的轉(zhuǎn)化。另外,Object.fromEntries()Object.entries() 的反轉(zhuǎn)函數(shù),他們的操作是相反的,主要用在對 Map 數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為普通的對象結(jié)構(gòu)。