[英]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
): 我的对象看起来像这样(我的变量
rIds
的console.log
):
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
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.