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

Lar*_*ard 5 javascript jquery

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

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

Firebug我变量的截图

现在,此对象的长度为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

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

Poi*_*nty 6

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.

  • @RGraham是的,谢谢我正在逐步思考:)今天早上我带着我的狗散步而不是喝咖啡,所以我的大脑很慢. (2认同)