欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript中你不知道的Object.entries用法

 更新時間:2021年10月09日 11:18:53   作者:GreenTea  
大家應該都知道,Object.entries()方法返回一個給定對象自身可枚舉屬性的鍵值對數(shù)組,其排列與使用 for...in 循環(huán)遍歷該對象時返回的順序一致,這篇文章主要給大家介紹了關(guān)于JavaScript中你不知道的Object.entries用法的相關(guān)資料,需要的朋友可以參考下

前言

平時我們經(jīng)常會用到 Object 類上的靜態(tài)方法,例如 Object.keys 、Object.values 、Object.assign 等等,但可能很少用到 Object.entries 這個方法,這篇文章就來講解 Object.entries 方法的兩個小技巧。

作用

Object.entries() 方法返回一個給定對象自身可枚舉屬性的鍵值對數(shù)組,其排列與使用 for…in 循環(huán)遍歷該對象時返回的順序一致(區(qū)別在于 for-in 循環(huán)也枚舉原型鏈中的屬性)。

示例

const obj = { foo: 'bar', baz: 42 };
console.log(Object.entries(obj)); // [ ['foo', 'bar'], ['baz', 42] ]

// array like object
const obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.entries(obj)); // [ ['0', 'a'], ['1', 'b'], ['2', 'c'] ]

// array like object with random key ordering
const anObj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.entries(anObj)); // [ ['2', 'b'], ['7', 'c'], ['100', 'a'] ]

// getFoo is property which isn't enumerable
const myObj = Object.create({}, { getFoo: { value() { return this.foo; } } });
myObj.foo = 'bar';
console.log(Object.entries(myObj)); // [ ['foo', 'bar'] ]

// non-object argument will be coerced to an object
console.log(Object.entries('foo')); // [ ['0', 'f'], ['1', 'o'], ['2', 'o'] ]

// iterate through key-value gracefully
const obj = { a: 5, b: 7, c: 9 };
for (const [key, value] of Object.entries(obj)) {
  console.log(`${key} ${value}`); // "a 5", "b 7", "c 9"
}

// Or, using array extras
Object.entries(obj).forEach(([key, value]) => {
console.log(`${key} ${value}`); // "a 5", "b 7", "c 9"

1. 使用 for...of 遍歷普通對象

很多初學前端的小伙伴可能都寫過下面這個代碼:

let obj = {
  a: 1,
  b: 2
}

for (let value of obj) {
  // ...
}

但是運行一下就發(fā)現(xiàn),哦吼,報錯了:

Uncaught TypeError: obj is not iterable

于是乎,遍歷普通對象就變成了清一色的 for...in 遍歷。但由于 for...in 不光會遍歷對象的自有屬性,還會遍歷到對象原型上,因此我們在使用的時候還需要加一個過濾,例如:

for (let key in obj) {
  if (Object.prototype.hasOwnProperty.call(obj, key)) {
    // ...
  }
}

可以看到這樣寫很不優(yōu)雅。之所以普通對象不能用 for...of 遍歷,是因為普通對象沒有實現(xiàn) iterator 接口(關(guān)于 JS 的迭代器會專門寫一篇文章講解)。而 JS 數(shù)組是實現(xiàn)了 iterator 接口的,因此通過 Object.entries 得到的鍵值對數(shù)組就可以使用 for...of 遍歷:

for (let [key, value] of Object.entries(obj)) {
  // ...
}

Object.entries 會返回對象自身可枚舉屬性的鍵值對數(shù)組,不包含原型上的屬性

2. 普通對象與 Map 對象相互轉(zhuǎn)換

看到項目中將普通對象轉(zhuǎn)為 Map 對象,還在使用 for...in 遍歷:

let obj = {
  a: 1,
  b: 2
}

let map = new Map();

for (let key in obj) {
  if (Object.prototype.hasOwnProperty.call(obj, key)) {
    map.set(key, obj[key]);
  }
}

實際上 Map 構(gòu)造器可以接受一個鍵值對數(shù)組初始化,這就意味著可以使用 Object.entries 將普通對象轉(zhuǎn)為 Map 對象:

let map = new Map(Object.entries(obj));

那么 Map 對象如何轉(zhuǎn)回普通對象呢?還使用遍歷嗎?不需要,可以使用 Object.fromEntries 靜態(tài)方法來轉(zhuǎn)換:

let obj = Object.fromEntries(map);

說到這里,很多小伙伴可能還是沒搞清楚普通對象、鍵值對數(shù)組、Map 對象的轉(zhuǎn)換關(guān)系,我用一張圖總結(jié)一下:

Object.entries 和 Object.fromEntries 是兩個相反的操作

總結(jié)

到此這篇關(guān)于JavaScript中你不知道的Object.entries用法的文章就介紹到這了,更多相關(guān)js Object.entries用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

參考

相關(guān)文章

  • js實現(xiàn)隨機點名程序

    js實現(xiàn)隨機點名程序

    這篇文章主要為大家詳細介紹了js實現(xiàn)隨機點名程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • 原生Javascript/原生JS修改CSS樣式的4種方式簡單示例

    原生Javascript/原生JS修改CSS樣式的4種方式簡單示例

    在網(wǎng)頁開發(fā)中我們經(jīng)常會用到JavaScript來操作網(wǎng)頁元素,其中一個常見的操作就是修改元素的CSS樣式,下面這篇文章主要給大家介紹了關(guān)于原生Javascript/原生JS修改CSS樣式的4種方式,需要的朋友可以參考下
    2024-03-03
  • 如何在父窗口中得知window.open()出的子窗口關(guān)閉事件

    如何在父窗口中得知window.open()出的子窗口關(guān)閉事件

    在父窗口中得知window.open()出的子窗口關(guān)閉事件的方法有很多,在本文將為大家詳細介紹下,感興趣的朋友可以參考下
    2013-10-10
  • js處理json以及字符串的比較等常用操作

    js處理json以及字符串的比較等常用操作

    js處理json格式的插入、修改、刪除,以及字符串的比較等常用操作,下面有五個示例,感興趣的朋友可以學習下
    2013-09-09
  • JavaScript實現(xiàn)數(shù)組降維詳解

    JavaScript實現(xiàn)數(shù)組降維詳解

    大家都知道將多維數(shù)組(尤其是二維數(shù)組)轉(zhuǎn)化為一維數(shù)組是業(yè)務開發(fā)中的常用邏輯,除了使用樸素的循環(huán)轉(zhuǎn)換以外,我們還可以利用Javascript的語言特性和數(shù)據(jù)結(jié)構(gòu)的思想實現(xiàn)更為簡潔優(yōu)雅的轉(zhuǎn)換。下面跟著小編一起來學習學習關(guān)于JavaScript如何實現(xiàn)數(shù)組降維吧。
    2017-01-01
  • webpack教程之webpack.config.js配置文件

    webpack教程之webpack.config.js配置文件

    本篇文章主要介紹了webpack教程之webpack.config.js配置文件 ,具有一定的參考價值,有興趣的可以了解一席
    2017-07-07
  • js判斷瀏覽器類型,版本的代碼(附多個實例代碼)

    js判斷瀏覽器類型,版本的代碼(附多個實例代碼)

    當前世界上有很多種瀏覽器,除了我們熟知的IE, Firefox, Opera, Safari四大瀏覽器之外,世界上還有近百種瀏覽器,有時候我們需要判斷瀏覽器與版本方便后續(xù)的操作,一句話瀏覽器的兼容性太差了,缺少標準
    2014-05-05
  • 理解javascript異步編程

    理解javascript異步編程

    這篇文章主要為大家介紹了javascript異步編程,從淺入深的學習javascript異步編程,對javascript異步編程感興趣的小伙伴們可以參考一下
    2016-01-01
  • javascript九宮格圖片隨機打亂位置的實現(xiàn)方法

    javascript九宮格圖片隨機打亂位置的實現(xiàn)方法

    這篇文章主要為大家詳細介紹了javascript九宮格圖片隨機打亂位置的實現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • JavaScript制作淘寶星級評分效果的思路

    JavaScript制作淘寶星級評分效果的思路

    這篇文章主要介紹了JavaScript制作淘寶星級評分效果的整個思考過程,思路很清晰,并附帶了完整的程序源碼,感興趣的小伙伴們可以參考一下
    2015-11-11

最新評論