我正在构建一个 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 & 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/