for let of 循环不起作用?
for let of loop doesn't work?
当我使用 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也不输出任何东西~?!
for-of
无法遍历对象(因为按照标准它们不可迭代)。
所以你要么必须使用旧的for-in
或
使用非标准化尚未Object.entries()
:
for (const [key, value] of Object.entries(obj)) {
console.log(key, value);
}
templateMap
在你的例子中是一个对象,而不是数组,因为你将字符串键分配给它(并且 JS 数组索引是 [0; 2^32-1)
范围内的数字)。
template
是数字吗?看起来您要将数组滥用为对象。尝试 templateMap.push(new Object())
附加到数组。
当我使用 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也不输出任何东西~?!
for-of
无法遍历对象(因为按照标准它们不可迭代)。
所以你要么必须使用旧的for-in
或
使用非标准化尚未Object.entries()
:
for (const [key, value] of Object.entries(obj)) {
console.log(key, value);
}
templateMap
在你的例子中是一个对象,而不是数组,因为你将字符串键分配给它(并且 JS 数组索引是 [0; 2^32-1)
范围内的数字)。
template
是数字吗?看起来您要将数组滥用为对象。尝试 templateMap.push(new Object())
附加到数组。