回答

收藏

如何循环或枚举 JavaScript 对象?

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

我有一个 JavaScript 对象,如下:
: F- z$ y; i- w8 s0 W
    var p =    "p1": "value1",   "p2": "value2",   "p3": "value3"};3 [" ~' H0 I+ w& Y/ `; N7 l
现在我想遍历一切p元素(p1,p2,p3…)并获得它们的键和值。我怎样才能做到这一点?
1 O) d5 }, r( C$ b如有必要,我可以修改 JavaScript 对象。我的最终目标是遍历一些键值对,如果可能的话,我想避免使用eval.& m) q6 c' w7 E
                                                               
( X2 I5 i7 b1 M$ x4 `    解决方案:                                                                / t' U7 X; c5 q; V8 {4 p7 \/ B6 B
                                                                您可以使用for-in其他人所示的循环。但是,你必须确保你得到的密钥是物体的实际属性,而不是原型。
8 H6 j; i2 W9 v  G$ O这是片段:
9 l- C$ ?. e0 \
    var p =    "p1": "value1",   "p2": "value2",   "p3": "value3"};for (var key in p)    if (p.hasOwnProperty(key))        console.log(key   " -> "   p[key]);    }}
    2 Q# }' o' k: N* V9 ]
使用 Object.keys() 替代方案:4 q1 R8 G1 F$ Y
    var p =     0: "value1",   "b": "value2",   key: "value3"};for (var key of Object.keys(p))    console.log(key   " -> "   p[key])}
    % L/ B  D& r, j1 {
Run code snippet7 r; N( B7 j+ {% h+ X4 e4 T
Expand snippet
4 {" ^) P8 y/ Q) L, N6 x) u注意使用for-of而不是for-in,如果不使用,它将返回未定义的命名属性,并且Object.keys()确保只使用对象本身的属性而不使用整个原型链属性
' ]' {1 e6 E# c0 s, q7 A- ]使用新Object.entries()方法:
/ T3 {% T6 W" b& j$ }; @1 u% p% C, Y注意:    Internet Explorer 本身不支持此方法。您可以考虑为旧版浏览器使用 Polyfill。
+ |3 R' z. l" D7 k; E3 q" T
    const p =    "p1": "value1",   "p2": "value2",   "p3": "value3"};for (let [key,value] of Object.entries(p)) {  console.log(`${key}: ${value}`);}
    8 d$ H/ J' o' j/ E
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则