带有带有管道分隔值和自定义验证规则的复选框网格的打字稿

我有一个复选框网格,其中包含 AccountIds(具有 x 位数)和文件名作为值的组合。每对值都用竖线分隔。


文件名将始终以 PRC 或 FE 开头,然后是各种字母组合。 '{accountId}|{fileName}'


验证规则:任何 AccountId 都不能有 > 1 种文件名类型(PRC或FE)


['123|PRC1', '123|FE1']  // Good


['123|PRC1', '123|PRC2'] // BAD b/c 2 PRC filename types with same accountId


['123|FE1', '123|FE2']   // BAD b/c 2 FE filenames types with same accountId


const checkedItems = [

'12345|PRC-3343',

'12345|FELMP',

'567892|PRC-3343',

'567892|FEIIO',

'12345|PRCNOWAY'

];


// Dataset should have false returned from a validation method

// It is invalid because there are two PRC files with accountId 12345

validateForm(checkedItems: string[]) {

  // find dups

}


formValid = this.validateForm(checkedItems);

非常感激你的帮助。我非常想寻找一种优化的方法来确定表单值是否有效。谢谢。


慕莱坞森
浏览 98回答 1
1回答

aluckdog

const checkedItems = ['12345|PRC-3343','12345|FELMP','567892|PRC-3343','567892|FEIIO','12345|PCNOWAY'];function validateForm(checkedItems: string[]): boolean {    const parsedCheckedItems = parseValues(checkedItems);    return !checkDups(parsedCheckedItems);}function parseValues(checkedItems: string[]): string[] {    return checkedItems.map(item => {        const pipeIdx = item.indexOf('|');        return item.substr(1, pipeIdx + 1);    });}function checkDups(parsedCheckedItems: string[]): boolean {    return new Set(parsedCheckedItems).size !== parsedCheckedItems.length;}const formValid = validateForm(checkedItems);console.log(formValid);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript