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

时间:2014-08-19 13:43:02

标签: javascript jquery

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

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

Firebug screenshot of my variable

现在,此对象的长度为0,这使得无法迭代它。

我想迭代每个键,所以我可以检索并访问我的id列表(rIds)。

代码

rIds[key].productIds

我尝试了什么?

我找到了以下代码段,但在IE8中无效。但是,即使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. }); 导致正确的长度,这也无济于事。

Object.keys(rIds).length

但是,此代码不会使我访问该对象。

Tl; dr&amp;问题

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

2 个答案:

答案 0 :(得分:6)

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,但您可以在MDN找到Object.keys()Array.prototype.forEach()的大多数正确的“polyfill”。 / p>

答案 1 :(得分:1)

要补充Pointy's answer,您还可以使用jQuery的$.each(因为您已在其他地方使用jQuery)来迭代rIds对象中的每个键/值对:

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