let memo = [] as any if (baseSetting.value.memo_source === 1) { memo = orderMemoList.value } else if (baseSetting.value.memo_source === 2) { invoiceDetail.value.forEach(item => { memo.push(item.memo) }) } else { memo = orderMemoList.value invoiceDetail.value.forEach(item => { memo.push(item.memo) }) } memo = memo.filter(iv => iv !== null) if (baseSetting.value.memo_merge === 1) { memo = Array.from(new Set(memo)) } memo = memo.join(',') invoiceData.value.memo = memo.substr(0, 130) 优化这段代码,memo值为空时,没有,
时间: 2024-03-27 16:39:32 浏览: 116
可以使用三元表达式来判断 `memo` 数组是否为空,如果为空则将其赋值为一个空数组 `[]`,这样就可以避免在 `memo` 为空时调用 `join()` 方法产生的问题。下面是优化后的代码:
```
let memo: string[] = [];
if (baseSetting.value.memo_source === 1) {
memo = orderMemoList.value || [];
} else if (baseSetting.value.memo_source === 2) {
memo = invoiceDetail.value.map(item => item.memo);
} else {
memo = (orderMemoList.value || []).concat(invoiceDetail.value.map(item => item.memo));
}
memo = memo.filter(iv => iv !== null);
if (baseSetting.value.memo_merge === 1) {
memo = Array.from(new Set(memo));
}
memo = memo.join(',');
invoiceData.value.memo = memo.substr(0, 130);
```
这样修改之后,当 `memo` 为空时,不会调用 `join()` 方法,也不会产生问题。
相关问题
let memo = [] as any if (baseSetting.value.memo_source === 1) { memo = orderMemoList.value } else if (baseSetting.value.memo_source === 2) { invoiceDetail.value.forEach(item => { memo.push(item.memo) }) } else { memo = orderMemoList.value invoiceDetail.value.forEach(item => { memo.push(item.memo) }) } memo = memo.filter(iv => iv !== null) if (baseSetting.value.memo_merge === 1) { memo = Array.from(new Set(memo)) } memo = memo.join(',') 为啥orderMemoList的值被改变了
从代码中看,`orderMemoList.value` 被赋值给了 `memo`,而 `orderMemoList.value` 是一个对象或数组,这里是通过引用传递的方式,也就是说 `memo` 和 `orderMemoList.value` 指向同一个对象或数组,所以当 `memo` 数组被修改时,`orderMemoList.value` 也会受到影响。
如果需要避免这种情况,可以使用数组或对象的复制方法来创建一个新的对象或数组,而不是直接使用引用传递。例如可以使用 `concat()` 方法合并一个新的数组,或者使用 `Object.assign()` 方法将对象属性复制到新的对象中。
阅读全文