我正在构建一个JavaScript数组,它将字符串作为键。
数组在每个条目都应该有一个对象。我的对象看起来像这样(变量console.log
的{{1}}):
现在,此对象的长度为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;问题
答案 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);
});