JavaScript >> Javascript 文檔 >  >> Tags >> object

如何在 JavaScript 中遍歷對象的鍵和值

有時您可能需要遍歷 JavaScript 中的對像以檢索多個鍵值對。在本文中,我們將研究在 JavaScript 中循環遍歷對象屬性的四種不同方法。

在 ES6 之前,循環對象的唯一方法是 for...in 循環。 Object.keys() 方法是在 ES6 中引入的,以便更容易迭代對象。後來在 ES8 中,添加了兩個新方法,Object.entries()Object.values() .最新的方法將對象轉換為數組,然後使用數組循環方法遍歷該數組。

讓我們從第一種方法開始吧!

for...in 循環

迭代對象屬性的最簡單直接的方法是使用 for...in 陳述。此方法適用於所有現代和舊瀏覽器,包括 Internet Explorer 6 及更高版本。

這是一個使用 for...in 的示例 循環遍歷一個對象:

const user = {
    name: 'John Doe',
    email: '[email protected]',
    age: 25,
    dob: '08/02/1989',
    active: true
};

// iterate over the user object
for (const key in user) {
    console.log(`${key}: ${user[key]}`);
}

// name: John Doe
// email: [email protected]
// age: 25
// dob: 08/02/1989
// active: true

問題for...in 循環是它也遍歷原型鏈中的屬性。由於 JavaScript 中的對象可以從其原型繼承屬性,所以 fo...in 語句也會遍歷這些屬性。

避免 在循環對象時迭代原型屬性,您需要顯式 使用 hasOwnProperty() 檢查屬性是否屬於對象 方法:

for (const key in user) {
    if (user.hasOwnProperty(key)) {
        console.log(`${key}: ${user[key]}`);
    }
}

幸運的是,我們不再需要依賴 for...inhasOwnProperty() 循環對象的方法。有更好的方法可用。

Object.keys() 方法

Object.keys() 方法是在 ES6 中引入的。它將您要迭代的對像作為參數,並返回一個包含所有屬性名稱(或鍵)的數組。

然後,您可以使用任何數組循環方法(例如 forEach())來遍歷數組並檢索每個屬性的值。

這是一個例子:

const courses = {
    java: 10,
    javascript: 55,
    nodejs: 5,
    php: 15
};

// convert object to key's array
const keys = Object.keys(courses);

// print all keys
console.log(keys);
// [ 'java', 'javascript', 'nodejs', 'php' ]

// iterate over object
keys.forEach((key, index) => {
    console.log(`${key}: ${courses[key]}`);
});

// java: 10
// javascript: 55
// nodejs: 5
// php: 15

在上面的函數聲明中,我使用了 ES6 語法。我假設你已經熟悉 ES6 尤其是箭頭函數。如果您是 ES6 新手,請查看箭頭函數指南以了解它。

Object.values() 方法

Object.values() 方法是在 ES8 中引入的,它與 Object.key() 相反 .它將對像中所有屬性的值作為數組返回。然後,您可以使用任何數組循環方法遍歷 values 數組。

讓我們看一個例子:

const animals = {
    tiger: '🐅',
    cat: '🐱',
    monkey: '🐒',
    elephant: '🐘'
};

// iterate over object values
Object.values(animals).forEach(val => console.log(val));

// 🐅
// 🐱
// 🐒
// 🐘

Object.entries() 方法

Object.entries() 是 ES8 中引入的另一種方法,可用於遍歷對象。不同於 Object.values() 在對像中創建一個值數組,Object.entries() 產生一個數組數組。每個內部數組都有兩個元素。第一個元素是屬性;第二個元素是值。

這是一個例子:

const animals = {
    tiger: '🐅',
    cat: '🐱',
    monkey: '🐒',
    elephant: '🐘'
};

const entries = Object.entries(animals);
console.log(entries);

// [ [ 'tiger', '🐅' ],
//   [ 'cat', '🐱' ],
//   [ 'monkey', '🐒' ],
//   [ 'elephant', '🐘' ] ]

遍歷 Object.entries() 返回的數組 ,您可以使用 for...of 循環或 forEach() 方法,如下所示:

// `for...of` loop
for (const [key, value] of Object.entries(animals)) {
    console.log(`${key}: ${value}`);
}

// `forEach()` method
Object.entries(animals).forEach(([key, value]) => {
    console.log(`${key}: ${value}`)
});

結論

這就是在 JavaScript 中迭代對象屬性的全部內容。我們研究了四種不同的方法來完成這項任務。 for...in 如果您想支持舊瀏覽器,它仍然是一個不錯的選擇。否則,只需使用任何最新方法:Object.keys() , Object.values()Object.entries() .


Tutorial JavaScript 教程
  1. 構建基於 nanoSQL 的 API

  2. JS-X-射線 2.0

  3. RxJS 自動運行介紹

  4. 有沒有辦法獲取子集合中的所有文檔(Firestore)

  5. 部署 Node 應用程序的 3 個簡單步驟

  6. 還有什麼比奇幻大陸更精彩的呢?靜態土地簡介

  7. 使用 React Router v5 檢測頁面刷新、選項卡關閉和路由更改

  1. 使用數字作為索引 (JSON)

  2. 公共解決:精靈郵政服務包計算器

  3. 如何在 JavaScript 中訪問沒有 Key 的對象的值

  4. 使用 NodeJS 的基於文件的操作

  5. Portal - Vue 3 中的新功能

  6. 14 個 jQuery 模態對話框

  7. 什麼是 JavaScript 函數純度及其重要性

  1. JavaScript 排序算法:選擇排序

  2. 給我上色

  3. 隔離的javascript開發環境/2021

  4. 在 NodeJs 中構建 CRON-MAN