我无法解决JSHint的错误消息。这是我正在使用的循环:
for (i = 0; i < Collection.length; i += 4) {
data.push({
items : Collection.slice(i, i + 4).map(function(item) {
return {
id: item[0],
title: item[1],
};
})
});
}
答案 0 :(得分:109)
您可以在循环外部移动该函数,并将对它的引用传递给map
:
function mapCallback(item) {
return {
id : item[0],
title : item[1],
};
}
for (i = 0; i < Collection.length; i += 4) {
data.push({
items: Collection.slice(i, i + 4).map(mapCallback)
});
}
或者,您可以使用JSHint指令忽略循环内的函数表达式。只需将其放在相关文件的顶部:
/*jshint loopfunc: true */
答案 1 :(得分:6)
在循环中声明函数很麻烦,并且可能容易出错。相反,定义一次函数,然后进入循环。
var objMaker = function(item) {
return {
id : item[0],
title : item[1],
};
};
for (i = 0; i < Collection.length; i += 4) {
data.push({
items : Collection.slice(i, i + 4).map(objMaker)
});
}
答案 2 :(得分:-1)
人们说“在循环中声明函数很麻烦,并且容易出错”,但是循环中的函数是直接在例如 Array.prototype.forEach 方法中指示的。仅仅因为“功能”一词在理论上应该意味着在每个 forEach 调用中重新定义它,但这并不意味着它实际上每次都由Javascript引擎定义。
外部循环也是如此,因为引擎对指令进行了“惰性”处理。他们不会重新定义整个 forEach / Map / etc构造指令,如果没有什么真正的改变,他们只会提供新的参数。
对于如此简单的事情以及代码上下文一无所知的古代JS引擎时代早已一去不复返了。然而,我们得到了这种古老的警告,这种警告是在功能还不能像 forEach 或 Map 的情况下作为参数传递时想到的。