当用户输入一个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
}
有记录吗?还有,这是打印稿。
3条答案
按热度按时间scyqe7ek1#
我认为这比实际需要的要复杂一些。数组方法会使这变得很简单。将对象的键(URL)放入一个数组中,然后检查
.every
是否其中一个URL * 不 * 以键入的文本开头。如果是,则没有潜在的匹配,并且可以返回错误字符串。urlStrings
的对象看起来有点奇怪,除非对象的值包含实际代码中的数据,否则可以考虑从普通数组开始。5m1hhzi42#
使用JS的原生数组方法来帮助你可能会更容易。将键添加到数组中,然后使用
some
来检查字符串与输入值的匹配。如果值与它们都不匹配,则抛出错误。第一个
agxfikkp3#
问得好!
首先,我建议您研究一下保护子句--您的嵌套层次太深,以至于逻辑跟踪起来更加复杂。
我认为您的
Throw error
与错误的if语句对齐--基本上,如果它成功了,它将永远不会抛出错误。如果您按照我的第一个建议重新格式化代码,我认为位置应该非常清楚--并且您不需要break语句。祝你好运,随时询问后续行动!