typescript 我如何修复子字符串以正确地从对象读取url?

iszxjhcz  于 2022-12-14  发布在  TypeScript
关注(0)|答案(3)|浏览(174)

当用户输入一个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(item)的第一个字母。我想得到从第一个字母到递增索引的所有内容。我在那里有一个break来停止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
}

有记录吗?还有,这是打印稿。

scyqe7ek

scyqe7ek1#

我认为这比实际需要的要复杂一些。数组方法会使这变得很简单。将对象的键(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',
];
5m1hhzi4

5m1hhzi42#

使用JS的原生数组方法来帮助你可能会更容易。将键添加到数组中,然后使用some来检查字符串与输入值的匹配。如果值与它们都不匹配,则抛出错误。
第一个

agxfikkp

agxfikkp3#

问得好!
首先,我建议您研究一下保护子句--您的嵌套层次太深,以至于逻辑跟踪起来更加复杂。
我认为您的Throw error与错误的if语句对齐--基本上,如果它成功了,它将永远不会抛出错误。如果您按照我的第一个建议重新格式化代码,我认为位置应该非常清楚--并且您不需要break语句。
祝你好运,随时询问后续行动!

相关问题