为了账号安全,请及时绑定邮箱和手机立即绑定

如何循环或枚举JavaScript对象?

如何循环或枚举JavaScript对象?

一只甜甜圈 2019-05-22 13:04:09
如何循环或枚举JavaScript对象?我有一个像以下JavaScript对象:var p = {     "p1": "value1",     "p2": "value2",     "p3": "value3"};现在我想通过所有回路p元素(p1,p2,p3...),并得到他们的键和值。我怎样才能做到这一点?如有必要,我可以修改JavaScript对象。我的最终目标是遍历一些键值对,如果可能的话,我想避免使用eval。
查看完整描述

4 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

你必须使用for-in循环

但是在使用这种循环时要非常小心,因为这将循环原型链中的所有属性

因此,在使用for-in循环时,始终使用该hasOwnProperty方法来确定迭代中的当前属性是否真的是您正在检查的对象的属性:

for (var prop in p) {
    if (!p.hasOwnProperty(prop)) {
        //The current property is not a direct property of p
        continue;
    }
    //Do your logic with the property here}


查看完整回答
反对 回复 2019-05-22
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

如果我们不提及循环对象的替代方法,那么问题就不会完整。

如今,许多众所周知的JavaScript库提供了自己的迭代集合的方法,即在数组对象类似数组的对象上。这些方法使用方便,并且与任何浏览器完全兼容。

  1. 如果您使用jQuery,您可以使用jQuery.each()方法。它可用于无缝迭代对象和数组:

    $.each(obj, function(key, value) {
        console.log(key, value);});
  2. Underscore.js中,你可以找到方法_.each(),它迭代一个元素列表,然后依次产生一个提供的函数(注意iteratee函数中参数的顺序!):

    _.each(obj, function(value, key) {
        console.log(key, value);});
  3. Lo-Dash提供了几种迭代对象属性的方法。Basic _.forEach()(或它的别名_.each())对于循环遍历对象和数组很有用,但是(!)具有length属性的对象被视为数组,并且为了避免这种行为,建议使用_.forIn()_.forOwn()方法(这些也有value参数首先):

    _.forIn(obj, function(value, key) {
        console.log(key, value);});

    _.forIn()迭代对象的自有和继承的可枚举属性,而_.forOwn()只迭代对象的自己的属性(基本上检查hasOwnProperty函数)。对于简单对象和对象文字,这些方法中的任何一种都可以正常工作。

通常,所有描述的方法与任何提供的对象具有相同的行为。除了使用本机for..in循环通常会比任何抽象更快,例如jQuery.each(),这些方法使用起来更简单,需要更少的编码并提供更好的错误处理。


查看完整回答
反对 回复 2019-05-22
  • 4 回答
  • 0 关注
  • 506 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信