Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.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 改进尝试不同URL变体直到匹配的循环_Javascript_Webdav_Owncloud - Fatal编程技术网

Javascript 改进尝试不同URL变体直到匹配的循环

Javascript 改进尝试不同URL变体直到匹配的循环,javascript,webdav,owncloud,Javascript,Webdav,Owncloud,我构建了连接到ownCloud的API,并通过WebDAV(使用)获取目录内容。因为我不能在这里使用正则表达式,而且在使用deep:true时glob匹配似乎不起作用,所以我必须检查文件夹名称的所有变体(因为客户有时输入所有字母大,或者只是姓氏大,但名称正常),这就是我在下面代码中结束的原因。它有很多重复,我认为有一种方法可以让它看起来更好: // if not found then go level up let tryMainDir = false let valid

我构建了连接到ownCloud的API,并通过WebDAV(使用)获取目录内容。因为我不能在这里使用正则表达式,而且在使用
deep:true
时glob匹配似乎不起作用,所以我必须检查文件夹名称的所有变体(因为客户有时输入所有字母大,或者只是姓氏大,但名称正常),这就是我在下面代码中结束的原因。它有很多重复,我认为有一种方法可以让它看起来更好:

    // if not found then go level up
    let tryMainDir = false
    let validUrl = () => {
      let url = `${baseUrl}/${caseYearAndMonth}/${lastName} ${firstName} - ${formNumber}/Form`
      return tryMainDir ? url.replace(`/${caseYearAndMonth}`, '') : url
    }

    let isUrlValid = await client.exists(validUrl())
    const updateIsUrlValid = async () => {
      isUrlValid = await client.exists(validUrl())
      console.log(isUrlValid)
    }

   if(!isUrlValid){
      // some names are uppercase and ownCloud is case-sensitive
      do {
        if(!isUrlValid){
          lastName = lastName.toUpperCase()
          await updateIsUrlValid()
        }
        if(!isUrlValid){
          firstName = firstName.toUpperCase()
          await updateIsUrlValid()
        }
        if(!isUrlValid){
          firstName = firstName.toLowerCase()
          lastName = lastName.toLowerCase()
          await updateIsUrlValid()
        }
        if(!isUrlValid){
          firstName = firstName.charAt(0).toUpperCase() + firstName.slice(1)
          lastName = lastName.charAt(0).toUpperCase() + lastName.slice(1)
          await updateIsUrlValid()
        }
        if(!isUrlValid){
          firstName = firstName.charAt(0).toUpperCase() + firstName.slice(1)
          lastName = lastName.charAt(0).toUpperCase() + lastName.slice(1)
          await updateIsUrlValid()
        }
        if(!isUrlValid && tryMainDir){
          break;
        }
        if(!isUrlValid){
          tryMainDir = true
        }
      } while (!isUrlValid)
    }

这个循环最多可以进行两轮。查看文件夹内部,然后查看父目录。

为什么有这么多if语句?为了清晰起见,请同时显示validUlr()的代码。if语句的数量也让我感到困扰-这就是为什么我提出这个问题,因为它肯定可以以更优雅的方式完成。使用
validul()
code更新了问题。是否可以使用?您可以在那里使用glob,也可以只获取整个目录并根据内容与regex匹配?您可以将所有URL放在前面的数组中,包括不同的父/子文件夹路径。然后你可以绕过去。我不认为尝试trymindir的循环效果很好。IMO说,最好是使用2个函数调用,或者使用前面提到的数组中的硬编码路径。