迭代对象属性将返回所有对象属性

时间:2016-10-13 15:18:54

标签: javascript json node.js

我有一个看起来像这样的json:

        "metrics" : {
            "ga:pageviews" : true,
            "bounceRate" : false
        }

这是一个更大的json的子对象。我像这样访问该对象:

var metrics = report.specifications[0]

我试图像这样迭代这两个属性:

    for(var key in metrics) {
        if (metrics.hasOwnProperty(key)) {
            console.log(key + " -> " + metrics[key]);
        }
    }

虽然我没有获得这两个属性,而是获得了一个包含该对象其他属性的非常大的列表。

我得到的无限列表的第一行是:

__parentArray -> { metrics: { 'ga:pageviews': true, bounceRate: false } }

这与我的问题有关吗?

整个JSON架构如下所示:

reportId: String,
specifications : [{
    metrics: {
        'ga:pageviews': Boolean,
        bounceRate: Boolean
    },
    dimensions: {

    }
}
]
}

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

通过在此处添加toObject()方法解决:

    var metrics = report.specifications[0].metrics.toObject();

答案 1 :(得分:0)

在JavaScript中迭代属性的最佳方法是使用Object.keys。执行此操作与使用for循环之间的区别在于Object.keys忽略原型链中的属性,您可能正在接受这些属性。

Object.keys(metrics).forEach(function (key) {
    console.log(key + " -> " + metrics[key]);
});