在循环外定义此函数

时间:2017-12-27 16:20:11

标签: javascript sonarqube

我有以下代码:

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跳过它。

1 个答案:

答案 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()也可以提高效率,因为函数不必每次都重新实例化循环运行。它可以一遍又一遍地重复使用相同的功能。

一旦封闭函数结束执行循环,变量就不再存在。