简体   繁体   English

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

[英]Iterating JavaScript object with strings as keys

I am building a JavaScript array, which has strings as keys. 我正在构建一个JavaScript数组,它有字符串作为键。

The array should have an object at every entry. 数组应该在每个条目都有一个对象。 My object looks like this (a console.log of my variable rIds ): 我的对象看起来像这样(我的变量rIdsconsole.log ):

Firebug我变量的截图

Now, the length of this object is 0, which makes it impossible to iterate it. 现在,此对象的长度为0,这使得无法迭代它。

I want to iterate every key, so I can retrieve and access my list of ids ( rIds[key].productIds ). 我想迭代每个键,所以我可以检索并访问我的id列表( rIds[key].productIds )。

Code : 代码

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.
        });

What did I try? 我尝试了什么?

I found the following snippet, which does not work in IE8. 我找到了以下片段,它在IE8中不起作用。 However, this does not really help be, even though Object.keys(rIds).length results in the correct length. 但是,即使Object.keys(rIds).length导致正确的长度,这也Object.keys(rIds).length

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

However, this code does not make my access the object. 但是,此代码不会使我访问该对象。

Tl;dr & question Tl; dr&question

  • How do I iterate my JavaScript object which has strings as keys, so I can access the individual entries? 如何迭代我的JavaScript对象,其中包含字符串作为键,以便我可以访问各个条目?

The Object.keys() function returns an array containing the property names of the object. Object.keys()函数返回一个包含对象属性名称的数组。

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

Alternatively, you can use the .forEach() method: 或者,您可以使用.forEach()方法:

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

Finally there's the venerable for ... in loop: 最后for ... in循环中的古老:

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

To support versions of IE before IE9 you're kind-of stuck with for ... in , though you can find mostly-correct "polyfills" for Object.keys() and Array.prototype.forEach() at MDN. 为了支持IE9之前的IE版本,你可以坚持使用for ... in ,尽管你可以在MDN上为Object.keys()Array.prototype.forEach()找到大多数正确的“polyfills”。

To supplement Pointy's answer , you can also use jQuery's $.each (since you're already using jQuery elsewhere) to iterate over each key/value pair in your rIds object: 为了补充Pointy的答案 ,您还可以使用jQuery的$.each (因为您已经在其他地方使用jQuery)迭代rIds对象中的每个键/值对:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM