最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript遍歷JSON所有Key的常用方法總結(jié)

 更新時間:2026年05月14日 08:24:35   作者:detayun  
這篇文章主要為大家詳細(xì)介紹了JavaScript遍歷JSON所有Key的四種常用方法,并展示了遞歸遍歷嵌套JSON的技巧和各方法的特點,有需要的小伙伴可以了解下

本文介紹了四種遍歷JSON對象屬性的方法:

  • for...in循環(huán):最常用,但會遍歷原型鏈屬性
  • Object.keys():推薦方法,返回對象自身可枚舉屬性
  • Object.entries():同時獲取鍵值對
  • Object.getOwnPropertyNames():包含不可枚舉屬性

文內(nèi)還展示了遞歸遍歷嵌套JSON的技巧,并對比了各方法特點。推薦大家日常使用Object.keys()或Object.entries(),它們更安全且語義清晰。對于復(fù)雜嵌套結(jié)構(gòu),可采用遞歸方式深度遍歷所有層級。

for…in 循環(huán)(最常用)

const json = {
  name: "張三",
  age: 25,
  city: "北京"
};

for (let key in json) {
  console.log(key);           // name, age, city
  console.log(json[key]);     // 張三, 25, 北京
}

Object.keys()(推薦 ?)

Object.keys(json).forEach(key => {
  console.log(key, json[key]);
});

// 或
Object.keys(json).map(key => {
  console.log(key);
});

Object.entries()(同時獲取 key 和 value)

for (let [key, value] of Object.entries(json)) {
  console.log(`${key}: ${value}`);
}

Object.getOwnPropertyNames()(包括不可枚舉屬性)

Object.getOwnPropertyNames(json).forEach(key => {
  console.log(key);
});

遞歸遍歷嵌套 JSON

function traverseKeys(obj, prefix = '') {
  for (let key in obj) {
    const fullKey = prefix ? `${prefix}.${key}` : key;
    console.log(fullKey);
    
    if (typeof obj[key] === 'object' && obj[key] !== null) {
      traverseKeys(obj[key], fullKey);  // 遞歸
    }
  }
}

const nestedJson = {
  user: {
    name: "張三",
    address: {
      city: "北京",
      street: "長安街"
    }
  }
};

traverseKeys(nestedJson);
// 輸出: user
//       user.name
//       user.address
//       user.address.city
//       user.address.street

方法對比

方法遍歷原型鏈包含 Symbol推薦場景
for...in??簡單遍歷
Object.keys()??日常推薦
Object.entries()??需要 key+value
getOwnPropertyNames()??完整屬性

推薦使用 Object.keys()Object.entries(),更安全且語義清晰!

方法補充

在 JavaScript 中,遍歷 JSON(即 JavaScript 對象)的所有 Key 有多種常用方法。下面按照推薦程度和使用場景介紹。

1. Object.keys() – 最常用

返回對象自身可枚舉屬性的 key 數(shù)組,不含原型鏈上的屬性。

const obj = { name: 'Alice', age: 25, city: 'Beijing' };
Object.keys(obj).forEach(key => {
  console.log(key, obj[key]);
});
// 輸出: name Alice, age 25, city Beijing

2. for...in – 遍歷所有可枚舉屬性(含原型鏈)

for (let key in obj) {
  if (obj.hasOwnProperty(key)) { // 過濾掉原型鏈上的屬性
    console.log(key, obj[key]);
  }
}

如果不加 hasOwnProperty 判斷,會遍歷到繼承的屬性(如 toString),通常需要避免。

3. Object.entries() – 同時獲取鍵和值

Object.entries(obj).forEach(([key, value]) => {
  console.log(key, value);
});

4. Object.getOwnPropertyNames() – 包含不可枚舉屬性

const obj = Object.create({}, {
  visible: { value: 1, enumerable: true },
  hidden:  { value: 2, enumerable: false }
});
Object.getOwnPropertyNames(obj).forEach(key => console.log(key));
// 輸出: visible, hidden (包含不可枚舉的 hidden)

5. Reflect.ownKeys() – 包含 Symbol 類型鍵

const sym = Symbol('id');
const obj = { [sym]: 123, name: 'test' };
Reflect.ownKeys(obj).forEach(key => console.log(key, obj[key]));
// 輸出: name test, Symbol(id) 123

6. 遍歷嵌套 JSON 的所有 Key(遞歸)

如果 JSON 內(nèi)部還嵌套了對象或數(shù)組,需要遞歸才能獲取所有層級的鍵。

function getAllKeys(obj, prefix = '') {
  let keys = [];
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      const fullKey = prefix ? `${prefix}.${key}` : key;
      keys.push(fullKey);
      const val = obj[key];
      if (val && typeof val === 'object') {
        keys = keys.concat(getAllKeys(val, fullKey));
      }
    }
  }
  return keys;
}

const json = {
  user: { name: 'John', address: { city: 'NYC', zip: 10001 } },
  active: true
};
console.log(getAllKeys(json));
// 輸出: ['user', 'user.name', 'user.address', 'user.address.city', 'user.address.zip', 'active']
方法自身可枚舉自身不可枚舉原型鏈Symbol
Object.keys()?????
for...in?????(需過濾)?
Object.getOwnPropertyNames()??????
Reflect.ownKeys()???????

日常遍歷普通 JSON 對象,Object.keys() 是最簡單、最推薦的方法。 如果需要同時獲取值,使用 Object.entries()。如果需要包含不可枚舉或 Symbol 鍵,再考慮另外兩種。

到此這篇關(guān)于JavaScript遍歷JSON所有Key的常用方法總結(jié)的文章就介紹到這了,更多相關(guān)JavaScript遍歷JSON所有Key內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaScript表單驗證完美代碼

    JavaScript表單驗證完美代碼

    用原生JS寫一個簡單的表單驗證功能,代碼分為html部分和js部分,代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的朋友參考下
    2017-03-03
  • JavaScript腳本延遲加載有哪些方式

    JavaScript腳本延遲加載有哪些方式

    本文主要介紹了JavaScript腳本延遲加載有哪些方式,主要介紹了五種方式,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • JS/HTML5游戲常用算法之追蹤算法實例詳解

    JS/HTML5游戲常用算法之追蹤算法實例詳解

    這篇文章主要介紹了JS/HTML5游戲常用算法之追蹤算法,結(jié)合吃豆人游戲的算法原理以實例形式詳細(xì)分析了追蹤算法的相關(guān)算法操作技巧與注意事項,需要的朋友可以參考下
    2018-12-12
  • BootStrap表單驗證實例代碼

    BootStrap表單驗證實例代碼

    這篇文章主要介紹了bootstrap表單驗證的實例代碼,代碼中包括引入的js文件,具體實現(xiàn)方法,大家參考本文
    2017-01-01
  • 微信小程序手機號驗證碼登錄的項目實現(xiàn)

    微信小程序手機號驗證碼登錄的項目實現(xiàn)

    本文主要介紹了微信小程序手機號驗證碼登錄的項目實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • 快速解決select2在bootstrap模態(tài)框中下拉框隱藏的問題

    快速解決select2在bootstrap模態(tài)框中下拉框隱藏的問題

    今天小編就為大家分享一篇快速解決select2在bootstrap模態(tài)框中下拉框隱藏的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • AngularJs中Bootstrap3 datetimepicker使用實例

    AngularJs中Bootstrap3 datetimepicker使用實例

    這篇文章主要為大家詳細(xì)介紹了AngularJs中Bootstrap3 datetimepicker使用實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • JS創(chuàng)建對象的寫法示例

    JS創(chuàng)建對象的寫法示例

    這篇文章主要介紹了JS創(chuàng)建對象的寫法,結(jié)合實例形式分析了javascript對象的定義、實現(xiàn)方法與使用技巧,需要的朋友可以參考下
    2016-11-11
  • webpack+express實現(xiàn)文件精確緩存的示例代碼

    webpack+express實現(xiàn)文件精確緩存的示例代碼

    這篇文章主要介紹了webpack+express實現(xiàn)文件精確緩存的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • JavaScript函數(shù)的一些注意要點小結(jié)及js匿名函數(shù)

    JavaScript函數(shù)的一些注意要點小結(jié)及js匿名函數(shù)

    本文給大家總結(jié)了javascript函數(shù)的一些注意要點及js匿名函數(shù),主要知識點有:函數(shù)的基本語法、函數(shù)的參數(shù)、函數(shù)的重載相關(guān)知識,對本文感興趣的朋友一起學(xué)習(xí)吧
    2015-11-11

最新評論

齐齐哈尔市| 长治县| 卢湾区| 山东省| 莱芜市| 酒泉市| 马鞍山市| 祁门县| 金华市| 江源县| 若尔盖县| 吕梁市| 临朐县| 盈江县| 环江| 黄骅市| 集贤县| 翁源县| 临夏县| 富宁县| 图木舒克市| 长沙市| 论坛| 西贡区| 永昌县| 珠海市| 青阳县| 沙河市| 泸西县| 抚远县| 潜山县| 阿巴嘎旗| 和平县| 北宁市| 阿图什市| 财经| 靖远县| 嘉鱼县| 津南区| 阿拉善盟| 邛崃市|