使用字符串作为键值的JavaScript对象迭代

5
我正在构建一个JavaScript数组,其中键是字符串。
这个数组的每一项都应该有一个对象。我的对象长这样(变量rIds的console.log):
现在,这个对象的长度为0,这使得迭代它变得不可能。
我想遍历每个键,这样我就可以检索并访问我的ID列表(rIds[key].productIds)。
代码:
var rIds = [];
        var response = RR.data.JSON.placements;

        console.log(response);
        $(response).each(function (placementId) {
            var placement_name = this.placement_name;

            rIds[this.placement_name] = {
                productIds: []
            };

            $(this.recs).each(function (recIndex) {
                var pid = this.pid;
                pid = getRandomId(19341610, 19341746);
                rIds[placement_name].productIds[recIndex] = pid;
            });
        });

        var count = '<%=ViewBag.Get("RecommendationCount") %>';

        console.log(rIds);
        console.log(rIds.length);
        $.each(rIds, function (index, val) {
            console.log(val);  // This should work as expected.
        });

我尝试了什么?

我找到了下面的代码片段,但它在IE8上不起作用。然而,即使 Object.keys(rIds).length 得出了正确的长度,这并没有真正帮助到我。

for (var index = 0; index < Object.keys(rIds).length; index++) {
            console.log(rIds[index]);
        }

然而,这段代码并没有使我访问到对象。

Tl;dr & 问题

  • 如何迭代我的JavaScript对象,它的键是字符串,以便我可以访问单个条目?

也许一个 JSFiddle 会帮助潜在的回答者。 - JF it
4
具有(非数字)字符串作为键的 JavaScript 对象不是数组。 - Pointy
2个回答

6
< p > Object.keys() 函数返回一个包含对象属性名称的数组。

var keys = Object.keys(rIds);
for (var i = 0; i < keys.length; ++i) {
  console.log(rids[keys[i]]); // object value
}

另外,您可以使用.forEach()方法:

Object.keys(rIds).forEach(function(key) {
  console.log(this[key]);
}, rIds);

最后是备受尊崇的 for ... in 循环:

for (var key in rIds) {
  if (rIds.hasOwnProperty(key))
    console.log(rIds[key]);

为了支持IE9之前的版本,你只能使用for ... in语法,不过在MDN上你可以找到大部分正确的“polyfills” Object.keys()Array.prototype.forEach()


OP提到了这一点,但在IE8中无法工作 - 因此值得提及替代方案。 - CodingIntrigue
2
@RGraham 是的,谢谢。我正在考虑逐步增加 :) 今天早上我带着狗散步,而不是狂灌咖啡,所以我的大脑有些迟缓。 - Pointy
哈哈!好的责任宠物主人 :) - CodingIntrigue

1

为了补充Pointy的回答,你也可以使用jQuery的$.each(因为你已经在其他地方使用了jQuery)来迭代你的rIds对象中的每个键/值对:

$.each(rIds, function(key, value) {
    console.log(value);
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接