这几天看js方法的时候,看到了一个 new Set 的,然后有一段简化的代码一直看不懂,有没有厉害的给我拆一下,给我看一下是怎么简化的
some里面应该是个匿名函数吧,然后里面是个闭包还是什么,麻烦请求一下,看一下怎么分解的
const findSum = (arr, sum) => arr.some((set => n => set.has(n) || !set.add(sum - n))(new Set))
![](https://profile-avatar.csdnimg.cn/f213133a10d6474db65f7f16d3c2286b_weixin_52036780.jpg!4)
来人看一下简化代码问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 林地宁宁 2022-08-04 23:38关注
先说一下这一段代码的意义:在
arr
中查找是否存在两个数的和为sum
。首先,从里面先拆
(set => n => set.has(n) || !set.add(sum - n))(new Set)
,相当于:let s = new Set const f1 = (n => set.has(n) || !set.add(sum - n))
首先这里
s
表示sum
对arr
中所有元素做差后的结果。- f1 的前半段
set.has(n)
意思是,判断n
是否在集合s
中,如果有的话,说明之前的某个数和当前的n
加起来等于sum
,于是整体函数返回 true。 - f1 的后半段
!set.add(sum - n)
就是继续构建s
的过程,取反的目的是防止其影响arr.some
的判断
到这里,其实应该理解了,其余部分仅仅是 js 的闭包语法问题,最终一个简化版如下:
function findSum(arr, sum) { let s = new Set for (let n of arr) { if (s.has(n)) { return true } else { s.add(sum - n) } } # 如果能运行到这,说明没找到东西 return false }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 - f1 的前半段
悬赏问题
- ¥15 Stata链式中介效应代码修改
- ¥15 latex投稿显示click download
- ¥15 请问读取环境变量文件失败是什么原因?
- ¥15 在若依框架下实现人脸识别
- ¥15 网络科学导论,网络控制
- ¥100 安卓tv程序连接SQLSERVER2008问题
- ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
- ¥15 metadata提取的PDF元数据,如何转换为一个Excel
- ¥15 关于arduino编程toCharArray()函数的使用
- ¥100 vc++混合CEF采用CLR方式编译报错