【问题标题】:How can I fix substring to read urls from object correctly?如何修复子字符串以正确读取对象中的 url?
【发布时间】:2022-12-18 06:37:17
【问题描述】:

当用户输入 url 时,我试图遍历一个对象,以便在子字符串与我的对象中任何 url 的开头不匹配之前不会抛出错误消息。

目的:

export const urlStrings: { [key: string]: string } = {
  'www.costco.com': '',
  'www.walmart.com': '',
  'www.google.com': '',
  'www.facebook.com': '',
}

所以用户将键入并且不会抛出错误,直到子字符串不正确:

w
ww
www.
www.c
www.ca <--- this should throw error

但是,因为我将 subString 设置为 1,所以它只给我 url(项目)的第一个字母。我想获得从第一个字母到递增索引的所有内容。我在那里有一个中断,可以停止 for 循环。

const correctUrl = (value: string | null): string => {
  let errorMessage = ''
  let item: string
  let subString = 1

  if (value && typeof value === 'string') {
    // eslint-disable-next-line guard-for-in
    for (item in urlStrings) {

      if (value?.length <= item?.length && subString <= item?.length) {
        if (item.substring(0, subString) === value.substring(0, subString)) {
          errorMessage = ''
          break
        }
      }
      subString += 1
    }
  } else {
    errorMessage = 'Throw error'
  }
  return errorMessage
}

任何建议?

【问题讨论】:

    标签: javascript typescript algorithm


    【解决方案1】:

    我认为这比需要的要复杂一些。数组方法将使这变得非常微不足道。将对象的键(URL)放入一个数组中,然后检查 .every 是否是这些 URL 之一才不是从键入的文本开始。如果是这样,则没有潜在的匹配项,您可以返回错误字符串。

    const urlStrings = {
        'www.costco.com': '',
        'www.walmart.com': '',
        'www.google.com': '',
        'www.facebook.com': '',
    };
    const urls = Object.keys(urlStrings);
    const correctUrl = (value: string | null): string => {
        if (value === null) {
            return 'Throw error';
        }
        return urls.every(url => !url.startsWith(value))
            ? 'Throw error' // None of the URLs matched
            : '';
    }
    

    urlStrings 的对象看起来有点奇怪。除非对象的值在您的实际代码中包含数据,否则您可以考虑从普通数组开始。

    const urls = [
        'www.costco.com',
        'www.walmart.com',
        'www.google.com',
        'www.facebook.com',
    ];
    

    【讨论】:

      【解决方案2】:

      好问题!

      首先,我建议您研究一下保护子句——您嵌套的层数如此之深,以至于逻辑变得更加复杂,难以追踪。

      我认为您的Throw error 与错误的 if 语句一致——基本上如果它成功了,它永远不会抛出错误。如果您按照我的第一个建议重新格式化您的代码,我认为位置应该非常清楚——并且您不需要 break 语句。

      祝你好运,随时询问后续行动!

      【讨论】:

        猜你喜欢
        • 2017-11-26
        • 2020-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-25
        • 2010-11-13
        相关资源
        最近更新 更多