关于js中的 => 和 this. 是怎么使用的

这篇博客深入浅出地介绍了JavaScript中基础且重要的两个概念:this关键字及其在不同场景下的行为,以及箭头函数的使用方式和特点。通过实例解析,帮助读者更好地理解和应用这两种语法。
代码 `this.formData.longlistSupplierList = this.formData.longlistSupplierList.filter(item1 =>!this.nameListIds.some(item2 => item1 == item2))` 的目的是从 `this.formData.longlistSupplierList` 数组中过滤掉那些存在于 `this.nameListIds` 数组中的元素。不过,这段代码可能存在以下潜在问题: ### 数据类型比较问题 代码里使用了 `==` 进行比较,`==` 在比较时会进行类型转换,这也许会引发意外的结果。例如,`'1' == 1` 会返回 `true`,但有时候我们期望的是严格相等。若需要严格比较,建议使用 `===`。 ```javascript this.formData.longlistSupplierList = this.formData.longlistSupplierList.filter(item1 =>!this.nameListIds.some(item2 => item1 === item2)); ``` ### 性能问题 当 `this.nameListIds` 数组非常大时,`some` 方法会对 `this.formData.longlistSupplierList` 中的每个元素都遍历一遍 `this.nameListIds`,这会使时间复杂度达到 $O(n * m)$,其中 $n$ 是 `this.formData.longlistSupplierList` 的长度,$m$ 是 `this.nameListIds` 的长度。为了提升性能,可以将 `this.nameListIds` 转换为 `Set`,因为 `Set` 的查找操作时间复杂度是 $O(1)$。 ```javascript const nameListIdsSet = new Set(this.nameListIds); this.formData.longlistSupplierList = this.formData.longlistSupplierList.filter(item1 =>!nameListIdsSet.has(item1)); ``` ### 空数组或未定义问题 如果 `this.formData.longlistSupplierList` 或 `this.nameListIds` 为 `undefined` 或者 `null`,代码会抛出错误。在使用之前,最好先进行空值检查。 ```javascript if (this.formData.longlistSupplierList && this.nameListIds) { const nameListIdsSet = new Set(this.nameListIds); this.formData.longlistSupplierList = this.formData.longlistSupplierList.filter(item1 =>!nameListIdsSet.has(item1)); } ``` ### 原数组修改问题 这段代码直接修改了 `this.formData.longlistSupplierList` 的值。在某些情况下,可能需要保留原数组,只创建一个新的过滤后的数组。如果是这种情况,代码本身没有问题,但要注意这一点。 ### 相关问题 1. 如何对过滤后的 `this.formData.longlistSupplierList` 数组进行排序? 2. 如果 `this.formData.longlistSupplierList` 中的元素是对象,该如何修改过滤逻辑? 3. 使用 `Set` 进行过滤会有什么潜在的内存问题吗? 4. 除了 `filter` `some` 方法,还有其他方法可以实现相同的过滤功能吗?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐开甲

共勉

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值