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的值被改变了
时间: 2024-03-28 22:38:25 浏览: 13
从代码中看,`orderMemoList.value` 被赋值给了 `memo`,而 `orderMemoList.value` 是一个对象或数组,这里是通过引用传递的方式,也就是说 `memo` 和 `orderMemoList.value` 指向同一个对象或数组,所以当 `memo` 数组被修改时,`orderMemoList.value` 也会受到影响。
如果需要避免这种情况,可以使用数组或对象的复制方法来创建一个新的对象或数组,而不是直接使用引用传递。例如可以使用 `concat()` 方法合并一个新的数组,或者使用 `Object.assign()` 方法将对象属性复制到新的对象中。
相关问题
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(',') 优化这段代码,防止orerMeomoList的值被修改
可以使用 `slice()` 方法创建一个新的数组,而不是直接引用 `orderMemoList.value`,从而避免原始数组被修改。同时,可以使用 `map()` 方法创建一个新的数组,而不是对原始数组进行遍历和修改。下面是优化后的代码:
```
let memo: string[] = [];
if (baseSetting.value.memo_source === 1) {
memo = orderMemoList.value.slice();
} else if (baseSetting.value.memo_source === 2) {
memo = invoiceDetail.value.map(item => item.memo);
} else {
memo = orderMemoList.value.slice().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(',');
```
这样修改之后,`orderMemoList.value` 的值就不会被修改了。
解释这行代码if (response.data.findIndex(item => item.IND_MEMO === x.label) !== -1) { chooseAfterValue.value.push(x) }
这是一段JavaScript代码,它先使用findIndex()函数在response.data数组中查找是否有符合条件的元素,如果找到了,则返回找到元素的下标,否则返回-1。然后使用不等于符号来进行判断,如果不等于-1,则执行花括号中的代码,将x添加到chooseAfterValue.value中。此代码的作用是根据x.label在response.data中查找匹配项,并将匹配项添加到chooseAfterValue.value数组中。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)