亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

JS中如何輕松遍歷對象屬性的方式總結

2024-05-06 16:54:01
字體:
來源:轉載
供稿:網友

自身可枚舉屬性

Object.keys() 方法會返回一個由一個給定對象的自身可枚舉屬性組成的數組,數組中屬性名的排列順序和使用 for...in 循環遍歷該對象時返回的順序一致 。如果對象的鍵-值都不可枚舉,那么將返回由鍵組成的數組。

這是合理的,因為大多數時候只需要關注對象自身的屬性。

來看看一個對象擁有自身和繼承屬性的例子,Object.keys()只返回自己的屬性鍵:

let simpleColors = { colorA: 'white', colorB: 'black'};let natureColors = { colorC: 'green', colorD: 'yellow'};Object.setPrototypeOf(natureColors, simpleColors);Object.keys(natureColors); // => ['colorC', 'colorD']natureColors['colorA']; // => 'white'natureColors['colorB']; // => 'black'

Object.setPrototypeOf() 方法設置一個指定的對象的原型 ( 即, 內部[[Prototype]]屬性)到另一個對象或 null。

Object.keys(natureColors)返回natureColors對象的自身可枚舉屬性鍵: ['colorC','colorD'] 。

natureColors包含從simpleColors原型對象繼承的屬性,但是Object.keys()函數會跳過它們。

Object.values() 和 Object.entries() 也都是返回一個給定對象自身可枚舉屬性的鍵值對數組

// ...Object.values(natureColors); // => ['green', 'yellow']Object.entries(natureColors);// => [ ['colorC', 'green'], ['colorD', 'yellow'] ]

現在注意與for..in語句的區別,for..in不僅可以循環枚舉自身屬性還可以枚舉原型鏈中的屬性

// ...let enumerableKeys = [];for (let key in natureColors) { enumerableKeys.push(key);}enumerableKeys; // => ['colorC', 'colorD', 'colorA', 'colorB']

enumerableKeys數組包含natureColors自身屬性鍵: 'colorC'和'colorD'。

另外for..in也遍歷了從simpleColors原型對象繼承的屬性

2. Object.values() 返回屬性值

Object.values()方法返回一個給定對象自身的所有可枚舉屬性值的數組,值的順序與使用for...in循環的順序相同 ( 區別在于 for-in 循環枚舉原型鏈中的屬性 )。

來個例子,使用Object.keys()收集keys,然后通過 key 去對象取對應的值:

let meals = { mealA: 'Breakfast', mealB: 'Lunch', mealC: 'Dinner'};for (let key of Object.keys(meals)) { let mealName = meals[key]; // ... do something with mealName console.log(mealName);}// 'Breakfast' 'Lunch' 'Dinner'

meal是一個普通對象。 使用Object.keys(meals)和枚舉的for..of循環獲取對象鍵值。

代碼看起來很簡單,但是,let mealName = meals[key] 沒有多大的必要,可以進一步優化,如下:

let meals = { mealA: 'Breakfast', mealB: 'Lunch', mealC: 'Dinner'};for (let mealName of Object.values(meals)) { console.log(mealName);}// 'Breakfast' 'Lunch' 'Dinner'

因為Object.values(meals)返回數組中的對象屬性值,所以可以直接在 for..of 中簡化。 mealName直接在循環中賦值。

Object.entries()

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

Object.entries() 返回鍵值對數組,如 [ [key1, value1], [key2, value2], ..., [keyN, valueN] ]。

可能直接使用這些鍵值對不怎么方便,但可以通過數組解構賦值方式訪問鍵和值就變得非常容易,如下所示:

let meals = { mealA: 'Breakfast', mealB: 'Lunch', mealC: 'Dinner'};for (let [key, value] of Object.entries(meals)) { console.log(key + ':' + value);}// 'mealA:Breakfast' 'mealB:Lunch' 'mealC:Dinner'

如上所示,因為 Object.entries()返回一個與數組解構賦值兼容的集合,因此不需要為賦值或聲明添加額外的行。

當普通對象要轉換成 Map 時Object.entries() 就很有用,因為Object.entries() 返回的格式與Map構造函數接受的格式完全相同:(key,value)。

使用常規的Map構造函數可以將一個二維鍵值對數組轉換成一個Map對象。

來個例子,讓人緩緩:

let greetings = { morning: 'Good morning', midday: 'Good day', evening: 'Good evening'};let greetingsMap = new Map(Object.entries(greetings));greetingsMap.get('morning'); // => 'Good morning'greetingsMap.get('midday'); // => 'Good day'greetingsMap.get('evening'); // => 'Good evening'

Map 對象保存鍵值對。任何值(對象或者原始值) 都可以作為一個鍵或一個值。

有趣的是,Map提供了與Object.values()Object.entries() 等效的方法(只是它們返回Iterators),以便為Map實例提取屬性值或鍵值對:

  • Map.prototype.values() 等價于Object.values()
  • Map.prototype.entries() 等價于Object.entries()

map是普通對象的改進版本,可以獲取 map 的大小(對于普通對象,必須手動獲取),并使用任意對象類型作為鍵(普通對象使用字符串基元類型作為鍵)。

讓我們看看返回.values().entries()的map的方法:

// ...[...greetingsMap.values()];// => ['Good morning', 'Good day', 'Good evening'][...greetingsMap.entries()];// => [ ['morning', 'Good morning'], ['midday', 'Good day'], //  ['evening', 'Good evening'] ]

注意,greetingsMap.values()greetingsMap.entries()返回迭代器對象。若要將結果放入數組,擴展運算符…是必要的。

對象屬性的順序

JS 對象是簡單的鍵值映射,因此,對象中屬性的順序是微不足道的, 在大多數情況下,不應該依賴它。

在ES5和早期標準中,根本沒有指定屬性的順序。

然而,從ES 6開始,屬性的順序是基于一個特殊的規則的,除非特指按照時間排序。通過兩個新方法Object.getOwnPropertyNamesReflect.ownKeys來編寫示例講解這一屬性排序規則。

  • 數字:當屬性的類型時數字類型時,會按照數字的從大到小的順序進行排序;
  • 字符串:當屬性的類型是字符串時,會按照時間的先后順序進行排序;
  • Symbol:當屬性的類型是Symbol時,會按照時間的先后順序進行排序。

如果需要有序集合,建議將數據存儲到數組或Set中。

總結

Object.values() Object.entries() 是為JS開發人員提供新的標準化輔助函數的另一個改進步驟。

Object.entries()最適用于數組解構賦值,其方式是將鍵和值輕松分配給不同的變量。 此函數還可以輕松地將純JS對象屬性映射到Map對象中。、

注意,Object.values()Object.entries()返回數據的順序是不確定的,所以不要依賴該方式。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
在线观看久久久久久| 国产97在线播放| 亚洲视频在线看| 琪琪第一精品导航| 国产亚洲日本欧美韩国| 深夜成人在线观看| 国产精品视频大全| 久久久成人精品| 久久成人一区二区| 久久久久久网址| 国产成人97精品免费看片| 久久亚洲春色中文字幕| 欧美国产亚洲视频| 欧美国产日产韩国视频| 日本精品视频在线播放| 久久免费福利视频| www.精品av.com| 中文字幕日韩在线观看| 久久人人爽人人爽人人片av高清| 国产亚洲精品久久久久久| 久久99久久亚洲国产| 国产在线观看精品一区二区三区| 国产精品第100页| 亚洲欧美日韩一区在线| 国产在线观看91精品一区| 久久理论片午夜琪琪电影网| 国产精品av在线播放| 久久伊人免费视频| 亚洲字幕一区二区| 456国产精品| 亚洲男人天堂古典| 中文字幕久久久av一区| 这里只有视频精品| 日韩www在线| 欧美人在线观看| 91成人福利在线| 欧美亚洲激情在线| 日韩精品一区二区视频| 中文字幕视频一区二区在线有码| 青青在线视频一区二区三区| 日韩av123| 中文字幕在线观看日韩| 日韩欧美一区视频| 一区二区欧美亚洲| 韩日精品中文字幕| 九九久久综合网站| 国产视频亚洲精品| 欧美一区二区三区艳史| 亚洲国产欧美在线成人app| 欧美成人免费全部| 亚洲国产成人在线视频| 亚洲最大福利视频网站| 欧美精品videosex牲欧美| 欧美成人精品在线播放| 国产一区二区三区18| 日韩中文字幕精品视频| 欧美精品18videos性欧美| 日本中文字幕不卡免费| 51色欧美片视频在线观看| 精品一区二区电影| 亚洲欧美日韩中文在线| 欧美一级淫片aaaaaaa视频| 欧美乱人伦中文字幕在线| 精品视频偷偷看在线观看| 日韩免费观看高清| 91久久精品日日躁夜夜躁国产| 国产91久久婷婷一区二区| 国产视频久久久久| 国产日韩欧美在线| 中文字幕一区电影| 上原亚衣av一区二区三区| 久久综合久久88| 日本一区二三区好的精华液| 国产在线拍揄自揄视频不卡99| 欧美日韩国产精品一区| 日韩在线观看免费全| 精品久久久国产精品999| 在线观看国产欧美| 成人日韩在线电影| 欧美与欧洲交xxxx免费观看| 国产亚洲激情在线| 欧美激情精品久久久久久久变态| 尤物九九久久国产精品的特点| 国产精品美女免费视频| 欧美黄色www| 日韩美女免费视频| 欧美激情精品久久久久久免费印度| 久久久久久久久久久91| 日韩一区二区三区国产| 欧美激情精品久久久久久| 欧美精品免费看| 2021久久精品国产99国产精品| 欧美高清视频一区二区| 91精品国产高清久久久久久91| 国产在线观看精品| 国产日韩精品综合网站| 久久综合电影一区| 亚洲日本中文字幕免费在线不卡| 亚洲国产日韩一区| 日本国产欧美一区二区三区| 免费91麻豆精品国产自产在线观看| 欧美日韩亚洲精品一区二区三区| 性色av一区二区咪爱| 亚洲人成五月天| 国产美女搞久久| 亚洲天堂一区二区三区| 在线看欧美日韩| 成人高h视频在线| 亚洲欧美日韩精品久久| 亚洲人a成www在线影院| 久久精品一本久久99精品| 疯狂做受xxxx高潮欧美日本| 国产91精品久久久久久| 亚洲欧洲一区二区三区久久| 成人有码视频在线播放| 中文字幕亚洲情99在线| 97在线免费观看| 91国自产精品中文字幕亚洲| 欧美日韩不卡合集视频| 欧美丰满少妇xxxxx做受| 日韩欧美国产骚| 久久久精品视频在线观看| 欧美巨乳在线观看| 疯狂蹂躏欧美一区二区精品| 成人午夜激情免费视频| 2019中文字幕全在线观看| 欧美在线www| 91丨九色丨国产在线| 亚洲国产黄色片| 青青草国产精品一区二区| 欧美成aaa人片在线观看蜜臀| 91在线看www| 中文字幕亚洲欧美一区二区三区| 国产在线久久久| 国产一区二区三区18| www.亚洲人.com| 77777亚洲午夜久久多人| 国产成人亚洲综合| 欧美—级a级欧美特级ar全黄| 美女黄色丝袜一区| 欧美不卡视频一区发布| 亚洲综合第一页| 亚洲欧美国产精品va在线观看| 亚洲最大的网站| 亚洲**2019国产| 欧美精品激情blacked18| 亚洲成色777777在线观看影院| 国产精品久久一区主播| 亚洲精品www久久久| 色婷婷av一区二区三区在线观看| 国产日韩欧美在线播放| 精品国内自产拍在线观看| 亚洲精品国产suv| 国产精品爱久久久久久久| 精品亚洲一区二区三区在线观看| 亚洲а∨天堂久久精品喷水| 欧美激情女人20p| 岛国av一区二区三区| 欧美激情精品久久久久久变态| 国产欧美日韩中文字幕在线| 久久九九亚洲综合| 午夜精品美女自拍福到在线| 91久久在线视频| 欧美一区二区三区免费视|