优化带码:<Item label={val.i_title} name={val.name} rules={[ ({ getFieldValue }) => ({ validator (_, value) { let { companyList, personList } = form.current.getFieldsValue(['companyList', 'personList']) let totalPercent = 0; //总比例 let percent = 0; //比例 let arr = [...companyList, ...personList].filter((c) => c.percent) let _allempty = true for (let i = 0; i < arr.length; i++) { for(let key in arr[i]) { if (key !== 'cardNoType' && arr[i][key]) { _allempty = false break } } if (!_allempty) { break } } if (_allempty) { return Promise.reject(new Error('请至少填写一条股东信息')) } arr.forEach((c) => { percent = c.percent ? parseFloat(c.percent) : 0 totalPercent += percent }) if (toFixed(totalPercent) * 1 !== 100) { return Promise.reject(new Error('股权比例精确到小数点后两位且总和等于100')); } console.log(companyList, personList); return Promise.resolve(); }, }), ]} labelAlign={val.labelAlign} > <ShareholdersInformation form={form} {...val.attrs}/> </Item>
时间: 2024-02-10 12:10:51 浏览: 96
『jQuery』.html(),.text()和.val()的概述及使用
这段代码中存在一些可以优化的地方:
1. 在循环中使用了一个变量 `_allempty` 来判断是否所有股东信息都为空,但是循环过程中没有对其进行更新,导致在第一次循环中就确定了其值,后面的循环就不会再更新。可以将其移动到循环内部,每次判断时重新赋值。
2. 在计算股权比例时,可以使用 reduce 方法简化计算过程。
3. 在计算股权比例时,使用了 `toFixed` 方法将结果转换成字符串,然后再乘以 1 转换回数字类型,这个过程可以使用 `Number` 函数代替。
优化后的代码如下:
```
<Item
label={val.i_title}
name={val.name}
rules={[
{
validator(_, value) {
const { companyList, personList } = form.current.getFieldsValue([
'companyList',
'personList',
]);
let totalPercent = 0; //总比例
let arr = [...companyList, ...personList].filter((c) => c.percent);
let allempty = true;
for (let i = 0; i < arr.length; i++) {
let empty = true;
for (let key in arr[i]) {
if (key !== 'cardNoType' && arr[i][key]) {
empty = false;
allempty = false;
break;
}
}
if (!empty) {
break;
}
}
if (allempty) {
return Promise.reject(new Error('请至少填写一条股东信息'));
}
totalPercent = arr.reduce((prev, cur) => prev + Number(cur.percent), 0);
if (totalPercent.toFixed(2) * 1 !== 100) {
return Promise.reject(new Error('股权比例精确到小数点后两位且总和等于100'));
}
console.log(companyList, personList);
return Promise.resolve();
},
},
]}
labelAlign={val.labelAlign}
>
<ShareholdersInformation form={form} {...val.attrs} />
</Item>
```
阅读全文