javascript - 以字符串为键迭代 JavaScript 对象

标签 javascript jquery

我正在构建一个 JavaScript 数组,它以字符串作为键。

数组的每个条目都应该有一个对象。我的对象看起来像这样(我的变量 rIdsconsole.log):

Firebug screenshot of my variable

现在,这个对象的长度为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 & question

  • 如何迭代以字符串作为键的 JavaScript 对象,以便访问各个条目?

最佳答案

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 之前的 IE 版本,您有点受困于 for ... in,尽管您可以为 Object.keys() 找到大部分正确的“polyfill”和 Array.prototype.forEach()在 MDN。

关于javascript - 以字符串为键迭代 JavaScript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25385006/

相关文章:

javascript - 通过 jQuery 仅选择一个对象并使用表单提交

javascript - Spotify 专辑的长度属性未定义?

javascript - 当浏览器选项卡处于非事件状态或最小化时计时器停止

Javascript 对象原型(prototype)混淆(使用 require.js 和 Three.js)

javascript - 在 Chrome 开发者工具中调试 AngularJS?

javascript - 对 jQuery 中的 promise 感到困惑

javascript - 使用 .prependTo() 时奇怪的边距

javascript - 使用下一个/上一个按钮切换图像

javascript - Facebook 是如何构建这个支持 iOS 的固定滚动框的?

javascript - meteor 鲁巴萨 :Sortable Nested Field