回答

收藏

如何循环或枚举 JavaScript 对象?

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

我有一个 JavaScript 对象,如下:
0 I: k( i& t; f5 `4 X, r: e# n
    var p =    "p1": "value1",   "p2": "value2",   "p3": "value3"};3 k* A. x; d$ a) T
现在我想遍历一切p元素(p1,p2,p3…)并获得它们的键和值。我怎样才能做到这一点?- f& A$ k; P4 d) u: @
如有必要,我可以修改 JavaScript 对象。我的最终目标是遍历一些键值对,如果可能的话,我想避免使用eval.
: k. h2 H6 U* O  C                                                                # L* o. |/ k4 C/ t
    解决方案:                                                               
  C' Z& W/ s( Y' k                                                                您可以使用for-in其他人所示的循环。但是,你必须确保你得到的密钥是物体的实际属性,而不是原型。- s* H- Q; t# Z/ R9 N! Z1 r
这是片段:
1 k* ^5 {: u2 {& E. G" ?# h
    var p =    "p1": "value1",   "p2": "value2",   "p3": "value3"};for (var key in p)    if (p.hasOwnProperty(key))        console.log(key   " -> "   p[key]);    }}
    . \0 M, @. m2 c* J3 C$ }
使用 Object.keys() 替代方案:7 n) Z$ K, L7 T3 l4 k) c
    var p =     0: "value1",   "b": "value2",   key: "value3"};for (var key of Object.keys(p))    console.log(key   " -> "   p[key])}
    % M, q3 A1 D3 i
Run code snippet
/ p2 A& c7 a* H0 {/ NExpand snippet
! b2 `8 t! g* f+ [$ d) Z注意使用for-of而不是for-in,如果不使用,它将返回未定义的命名属性,并且Object.keys()确保只使用对象本身的属性而不使用整个原型链属性
- N2 _* V/ R' \8 |3 P% W: H使用新Object.entries()方法:
/ L$ t8 Y& r2 V0 h注意:    Internet Explorer 本身不支持此方法。您可以考虑为旧版浏览器使用 Polyfill。
2 R+ \! e7 a# A
    const p =    "p1": "value1",   "p2": "value2",   "p3": "value3"};for (let [key,value] of Object.entries(p)) {  console.log(`${key}: ${value}`);}+ v5 O) ~  b* R
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则