let prev = arr[0][arr[0].length - 1] 是什么意思
时间: 2024-01-05 11:04:58 浏览: 31
这行代码是用来获取二维数组 `arr` 中第一行最后一个元素的值并将其赋给变量 `prev`。具体来说,`arr[0]` 代表 `arr` 数组中的第一行,而 `arr[0].length - 1` 则是该行的最后一个元素的索引。因此,`arr[0][arr[0].length - 1]` 表示的是 `arr` 数组中第一行最后一个元素的值。
相关问题
优化带码:<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>
这段代码中存在一些可以优化的地方:
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>
```
[{},{},{}]js去重操作
假设要去重的数组为arr,以下是几种js去重操作:
1. 使用ES6的Set方法
```javascript
let newArr = [...new Set(arr)];
```
2. 使用filter方法
```javascript
let newArr = arr.filter((item, index) => {
return arr.indexOf(item) === index;
});
```
3. 使用reduce方法
```javascript
let newArr = arr.reduce((prev, cur) => {
if (prev.indexOf(cur) === -1) {
prev.push(cur);
}
return prev;
}, []);
```
4. 使用for循环和indexOf方法
```javascript
let newArr = [];
for (let i = 0; i < arr.length; i++) {
if (newArr.indexOf(arr[i]) === -1) {
newArr.push(arr[i]);
}
}
```