回答

收藏

如何循环或枚举 JavaScript 对象?

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

我有一个 JavaScript 对象,如下:
+ n2 s$ @0 M1 C) O) }, O% J; l
    var p =    "p1": "value1",   "p2": "value2",   "p3": "value3"};% N% E; w% j$ @7 K2 q. z* n
现在我想遍历一切p元素(p1,p2,p3…)并获得它们的键和值。我怎样才能做到这一点?
$ D( D7 N  h1 _* d5 g/ u9 O如有必要,我可以修改 JavaScript 对象。我的最终目标是遍历一些键值对,如果可能的话,我想避免使用eval.
1 g5 K9 L# G  ]6 Q) ^" S$ s8 h                                                               
5 u# W2 F" V' Y# P    解决方案:                                                               
. e& q6 V' a) }                                                                您可以使用for-in其他人所示的循环。但是,你必须确保你得到的密钥是物体的实际属性,而不是原型。
% l8 |: o5 t/ i这是片段:
; G1 ~5 w3 u& N8 i* ]) [
    var p =    "p1": "value1",   "p2": "value2",   "p3": "value3"};for (var key in p)    if (p.hasOwnProperty(key))        console.log(key   " -> "   p[key]);    }}
    , |$ M/ Z; E* h! y8 e: H  g' B
使用 Object.keys() 替代方案:+ D3 g5 X$ m0 j; _( n$ e5 b
    var p =     0: "value1",   "b": "value2",   key: "value3"};for (var key of Object.keys(p))    console.log(key   " -> "   p[key])}' H# ]2 T. V) \5 A4 Y
Run code snippet, C) k6 _1 p4 h5 ?# c1 `' A( {, K1 Y
Expand snippet- S. D& x0 s# n$ l8 k* v) s7 z
注意使用for-of而不是for-in,如果不使用,它将返回未定义的命名属性,并且Object.keys()确保只使用对象本身的属性而不使用整个原型链属性* D1 u' Y0 H7 e8 f/ a$ @7 O1 D
使用新Object.entries()方法:" m# c' U- ^% W  M; U! j$ k% _
注意:    Internet Explorer 本身不支持此方法。您可以考虑为旧版浏览器使用 Polyfill。
! {- b- O4 u3 b1 E3 r0 |
    const p =    "p1": "value1",   "p2": "value2",   "p3": "value3"};for (let [key,value] of Object.entries(p)) {  console.log(`${key}: ${value}`);}% W: R, D- _* b# f3 W% w+ x
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则