我有以下代码:
for (var entry in metadata) {
if (metadata.hasOwnProperty(entry)) {
var varName = metadata[entry].variableName;
if (metadata[entry].multipleValues === "false") {
if (angular.isDefined(vm[varName]) && (vm[varName] !== null) && vm[varName].id !== null) {
filters.push(factory.buildEntry(metadata[entry].variableName, vm[varName].id, null, factory.filterOperators.textContains));
}
} else {
if (angular.isDefined(vm[varName]) && (angular.isArray(vm[varName])) && (vm[varName].length > 0)) {
filters.push(factory.buildEntry(metadata[entry].variableName, null, vm[varName].map(function (item) {
return item.id;
}), factory.filterOperators.textContains));
}
}
}
}
但是SonarQube一直告诉我Define this function outside of a loop.
,我在这个循环中唯一的函数是我传递给Array.prototype.map()
方法的匿名函数:
function (item) {
return item.id;
}
如果我在循环之外定义它,那将是无用的,因为它的主体只包含一行代码。
为什么我收到此错误?我怎么能告诉SonarQube跳过它。
答案 0 :(得分:0)
如何在循环外定义它
var mapFunction = function (item) {
return item.id;
};
for (var entry in metadata) {
if (metadata.hasOwnProperty(entry)) {
var varName = metadata[entry].variableName;
if (metadata[entry].multipleValues === "false") {
if (angular.isDefined(vm[varName]) && (vm[varName] !== null) && vm[varName].id !== null) {
filters.push(factory.buildEntry(metadata[entry].variableName, vm[varName].id, null, factory.filterOperators.textContains));
}
} else {
if (angular.isDefined(vm[varName]) && (angular.isArray(vm[varName])) && (vm[varName].length > 0)) {
filters.push(factory.buildEntry(metadata[entry].variableName, null, vm[varName].map(mapFunction), factory.filterOperators.textContains));
}
}
}
}
您可以将函数分配给变量,然后将该变量视为函数
var foo = function(){console.log('bar')};
foo();

在您的情况下,通过将映射函数分配给变量,然后将该变量传递给.map()
也可以提高效率,因为函数不必每次都重新实例化循环运行。它可以一遍又一遍地重复使用相同的功能。
一旦封闭函数结束执行循环,变量就不再存在。