我正在构建一个JavaScript数组,它有字符串作为键.
数组应该在每个条目都有一个对象.我的对象看起来像这样(console.log我的变量之一rIds):

现在,此对象的长度为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.
});
Run Code Online (Sandbox Code Playgroud)
我尝试了什么?
我找到了以下片段,它在IE8中不起作用.但是,即使Object.keys(rIds).length得到正确的长度,这也无济于事.
for (var index = 0; index < Object.keys(rIds).length; index++) {
console.log(rIds[index]);
}
Run Code Online (Sandbox Code Playgroud)
但是,此代码不会使我访问该对象.
Tl; dr&question
该Object.keys()函数返回一个包含对象属性名称的数组.
var keys = Object.keys(rIds);
for (var i = 0; i < keys.length; ++i) {
console.log(rids[keys[i]]); // object value
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用以下.forEach()方法:
Object.keys(rIds).forEach(function(key) {
console.log(this[key]);
}, rIds);
Run Code Online (Sandbox Code Playgroud)
最后还有令人尊敬的for ... in循环:
for (var key in rIds) {
if (rIds.hasOwnProperty(key))
console.log(rIds[key]);
Run Code Online (Sandbox Code Playgroud)
为了支持你是那种-的套牢IE9之前的IE版本for ... in,虽然你可以找到大部分是纠正"polyfills"为Object.keys()和Array.prototype.forEach()在MDN.
| 归档时间: |
|
| 查看次数: |
275 次 |
| 最近记录: |