for let 循环不起作用?

Posted

技术标签:

【中文标题】for let 循环不起作用?【英文标题】:for let of loop doesn't work? 【发布时间】:2016-05-13 10:16:26 【问题描述】:

当我使用 for in 循环时,它可以工作,而 for of 循环却什么也得不到:( 这是我的代码

'use strict'

var match_table = [
  'project': 'Laveral', 'template': 'Blade',
  'project': 'Ember.js', 'template': 'Handlebars',
  'project': 'Meteor', 'template': 'Handlebars',
];

// count project number by template
var templateMap = new Array();
match_table.forEach(function(listItem)
  var template = listItem['template'];
  if (!templateMap[template]) 
    templateMap[template] = new Object();
  
  templateMap[template]['name'] = template;
  if (templateMap[template]['count']) 
    templateMap[template]['count']++;
   else 
    templateMap[template]['count'] = 1;
  
);

//console.log(templateMap);

// for loop fails
for (let value of templateMap) 
  console.log(value);


templateMap.forEach(function(item) 
  console.log(item);
)

forEach 也不输出任何东西~?!

【问题讨论】:

【参考方案1】:

for-of 无法遍历对象(因为按照标准它们不可迭代)。

所以你要么必须使用旧的for-in

使用尚未标准化的Object.entries()

for (const [key, value] of Object.entries(obj)) 
    console.log(key, value);

templateMap 在您的情况下是一个对象,而不是数组,因为您将字符串键分配给它(并且 JS 数组索引是 [0; 2^32-1) 范围内的数字)。

【讨论】:

我很感兴趣Object.entries() 的开销有多大:jsperf.com/object-entries-4711。这远远不能忽视。这是 Python 中 iteritems()item() 的重演。 @Kay 它分配了一堆数组,但很有趣,谢谢。 @Kay 你应该至少添加 hasOwnProperty 检查。 zerkms:JS 数组被限制为 2^32 AFAIR,更大的长度被截断。 @Ginden 谢谢,确实我混淆了术语:ecma-international.org/ecma-262/6.0/#sec-object-type【参考方案2】:

template 是数字吗?看起来您将误用数组作为对象。尝试将 templateMap.push(new Object()) 附加到数组中。

【讨论】:

以上是关于for let 循环不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

嵌套的 for 循环将不起作用。句法?

范围在 for 循环中不起作用

Java中的for循环不起作用[重复]

Swift:for循环中延迟的动画不起作用?

简单的for循环不起作用[关闭]

为啥 SharpDevelop 上这个使用“for”循环的小 C# 程序不起作用?