Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何修复可变变量可以通过while循环从closure warning访问_Javascript - Fatal编程技术网

Javascript 如何修复可变变量可以通过while循环从closure warning访问

Javascript 如何修复可变变量可以通过while循环从closure warning访问,javascript,Javascript,下面是我的函数,该函数用于验证名称,以便不存在重复项: function validateBucketName(){ var counter = 1; var validated = false; var suggestedName = "Bucket " + (vm.buckets.length + counter); if(vm.buckets.length === 0) return suggestedName;

下面是我的函数,该函数用于验证名称,以便不存在重复项:

function validateBucketName(){
        var counter = 1;
        var validated = false;
        var suggestedName = "Bucket " + (vm.buckets.length + counter);
        if(vm.buckets.length === 0) return suggestedName;

        while(!validated){
            var foundIndex = vm.buckets.findIndex(function (bucket) {
                return bucket.name === suggestedName;
            });
            if(foundIndex === -1){
                validated = true;
            } else {
                counter++;
                suggestedName = "Bucket " + (vm.buckets.length + counter);
            }
        }
        return suggestedName;
    }
我得到了一个非常常见的错误,我知道如何处理for循环中的错误,但不知道如何处理while循环。谁能看看这个吗

这可能是非常低效的方法,试图确保没有重复的名字存在。如果你有什么建议,可以随时发表评论

这是一个更好的方法 您不需要validate变量,只需使用whiletrue,因为您将获得缺少的suggestedName

当此条件为true时,如果foundIndex=-1,则返回suggestedName

查看此代码段并进行以下修改:


使用Set开始。感谢您的优化建议。我的主要问题是“可变变量可从闭包访问”警告。有什么想法吗?顺便说一句,那个代码实际上不起作用。这里有语法问题。@konrad您可以从for循环外部提取比较函数。看看答案。
function validateBucketName() {
  var counter = 1;
  var suggestedName = "Bucket " + (vm.buckets.length + counter);

  if (vm.buckets.length === 0) return suggestedName;

  var compare = function(bucket) {
      return bucket.name === suggestedName;
  };

  while (true) {
    if (vm.buckets.findIndex(compare) === -1) {
      return suggestedName;
    else 
      suggestedName = "Bucket " + (vm.buckets.length + (counter++));
  }

  return suggestedName;
}