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;
}