回答

收藏

如何循环或枚举 JavaScript 对象?

技术问答 技术问答 83 人阅读 | 0 人回复 | 2023-09-11

我有一个 JavaScript 对象,如下:
6 a8 P0 ?3 B  ^& U4 K
    var p =    "p1": "value1",   "p2": "value2",   "p3": "value3"};
    . A' S" t- |0 r
现在我想遍历一切p元素(p1,p2,p3…)并获得它们的键和值。我怎样才能做到这一点?$ [' a. x& t& y9 ^- V2 H' s# |
如有必要,我可以修改 JavaScript 对象。我的最终目标是遍历一些键值对,如果可能的话,我想避免使用eval.; o/ R( I' i) E
                                                               
3 u- N- o6 B: ]- U. q    解决方案:                                                                6 o0 M* i1 M6 N! ^0 u
                                                                您可以使用for-in其他人所示的循环。但是,你必须确保你得到的密钥是物体的实际属性,而不是原型。% z  T# J* M' B; O! h; }/ q
这是片段:, I/ E2 P. `& {/ |1 g
    var p =    "p1": "value1",   "p2": "value2",   "p3": "value3"};for (var key in p)    if (p.hasOwnProperty(key))        console.log(key   " -> "   p[key]);    }}" `0 F. o+ `; B
使用 Object.keys() 替代方案:8 x3 j/ J1 l+ y3 X" S
    var p =     0: "value1",   "b": "value2",   key: "value3"};for (var key of Object.keys(p))    console.log(key   " -> "   p[key])}- g0 s8 \6 J7 E9 W6 A4 P1 V# y
Run code snippet. i, d* r. e" A! f' m4 e$ m8 _& x7 ?
Expand snippet0 k  p4 V6 u5 g$ ?$ F: m, s) C& X; g
注意使用for-of而不是for-in,如果不使用,它将返回未定义的命名属性,并且Object.keys()确保只使用对象本身的属性而不使用整个原型链属性: c3 G2 `% X6 [, J3 N+ Y$ o
使用新Object.entries()方法:
! S5 N0 o# `- c: B注意:    Internet Explorer 本身不支持此方法。您可以考虑为旧版浏览器使用 Polyfill。
7 \( z. q  l7 C' ~2 g2 g6 U2 Z
    const p =    "p1": "value1",   "p2": "value2",   "p3": "value3"};for (let [key,value] of Object.entries(p)) {  console.log(`${key}: ${value}`);}. T% v# d# V+ t/ U" i4 h
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则