为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕莱坞森 2023-03-10 16:05:32
我有一个复选框网格,其中包含 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 accountIdconst 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 12345validateForm(checkedItems: string[]) {  // find dups}formValid = this.validateForm(checkedItems);非常感激你的帮助。我非常想寻找一种优化的方法来确定表单值是否有效。谢谢。
查看完整描述

1 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

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);


查看完整回答
反对 回复 2023-03-10
  • 1 回答
  • 0 关注
  • 97 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信