JSLint:如何不在循环中创建这个函数

JSLint: how not to make THIS function within a loop

在我的 angular 应用程序中,我使用循环在对象中查找最接近给定数字的值和 return 它的键。

例如,我想要最接近 0.5 的值:

for (var j in nums) {
      if (0.5 > nums[j]) var prev = nums[j];
      else if (0.5 <= nums[j]) {
        // If the current number is equal to 0.5, or immediately higher, stores that number
        // and stops the for each() loop
        var next = nums[j];
        // Get the value
        var percentage = (Math.abs(0.5 - prev) < Math.abs(next - 0.5)) ? prev : next;
        // Get the key from the value
        $scope.seventyfive = parseInt('0' + Object.keys(nums).filter(function(key) {return nums[key] === percentage;})[0], 10);
        break;
      }
    }

JSLint 指出我不应该在循环中创建函数,所以我试图通过以下方式避免这种情况:

filterPct = function (nums, pct) {
      return function () {
        return nums[key] === pct;
      };
    }

for (var j in nums) {
      if (0.5 > nums[j]) var prev = nums[j];
      else if (0.5 <= nums[j]) {
        // If the current number is equal to 0.5, or immediately higher, stores that number
        // and stops the for each() loop
        var next = nums[j];
        // Get the value
        var percentage = (Math.abs(0.5 - prev) < Math.abs(next - 0.5)) ? prev : next;
        // Get the key from the value
        $scope.seventyfive = parseInt('0' + Object.keys(nums).filter(filterPct(nums, percentage))[0], 10);
        break;
      }
    }

但这是 returning 0 而不是正确的值。我肯定我遗漏了一些明显的东西,但我显然需要另一双眼睛...

更新:感谢大家的支持,这是上面代码的防错版本:

filterPct = function (nums, pct) {
      return function (key) {
        return nums[key] === pct;
      };
    };

    // Store the value with 50% Confidence
    for (i in nums) {
      if (nums.hasOwnProperty(i)) {
        if (0.5 > nums[i]) {
          prev = nums[i];
        } else if (0.5 <= nums[i]) {
          // If the current number is equal to 0.5, or immediately higher, stores that number
          // and stops the for each() loop
          next = nums[i];
          // Get the value
          percentage = (Math.abs(0.5 - prev) < Math.abs(next - 0.5)) ? prev : next;
          // Get the key from the value
          $scope.fifty = parseInt('0' + Object.keys(nums).filter(filterPct(nums, percentage))[0], 10);
          break;
        }
      }
    }
filterPct = function (nums, pct) {
    return function () {
        return nums[key] === pct;
    };
}

你忘记定义key(它应该是内部函数的第一个参数)。