回答

收藏

如何循环或枚举 JavaScript 对象?

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

我有一个 JavaScript 对象,如下:# _' o; ~+ |  `0 {4 w" x
    var p =    "p1": "value1",   "p2": "value2",   "p3": "value3"};
    $ j* Y( m+ f+ o* j: {( I
现在我想遍历一切p元素(p1,p2,p3…)并获得它们的键和值。我怎样才能做到这一点?
4 m0 |3 i1 p* h" f) |如有必要,我可以修改 JavaScript 对象。我的最终目标是遍历一些键值对,如果可能的话,我想避免使用eval.
# e' U0 W8 M9 x6 w2 N5 ], z" ~                                                               
5 W3 C  H+ b# n5 |' t( Q; r0 C* X    解决方案:                                                               
9 j$ a, y8 h+ k                                                                您可以使用for-in其他人所示的循环。但是,你必须确保你得到的密钥是物体的实际属性,而不是原型。
4 J3 N9 j3 m# K2 R' W这是片段:
, u0 V# ?6 f, F- b. I% J+ x
    var p =    "p1": "value1",   "p2": "value2",   "p3": "value3"};for (var key in p)    if (p.hasOwnProperty(key))        console.log(key   " -> "   p[key]);    }}+ _6 ]9 x9 E) J" J# G# ^2 e
使用 Object.keys() 替代方案:
3 `1 d$ H1 S5 F: ~7 C2 D8 }; {  ?
    var p =     0: "value1",   "b": "value2",   key: "value3"};for (var key of Object.keys(p))    console.log(key   " -> "   p[key])}
    ' H/ }2 Z3 v+ \
Run code snippet3 K: G2 ?+ O; A. |( S
Expand snippet$ Q. P$ Y9 m5 s5 \9 K
注意使用for-of而不是for-in,如果不使用,它将返回未定义的命名属性,并且Object.keys()确保只使用对象本身的属性而不使用整个原型链属性
. `7 n& \) G) L  Y- M' _. m4 y# I使用新Object.entries()方法:" [+ a" [( y1 z8 L" J
注意:    Internet Explorer 本身不支持此方法。您可以考虑为旧版浏览器使用 Polyfill。
! n3 i7 A6 c! Y* A7 v
    const p =    "p1": "value1",   "p2": "value2",   "p3": "value3"};for (let [key,value] of Object.entries(p)) {  console.log(`${key}: ${value}`);}
    - `) \! n( I6 W( V4 Q; n0 q% X
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则