ゞ 可乐 2022-08-04 09:20 采纳率: 22.2%
浏览 25
已结题

来人看一下简化代码问题

这几天看js方法的时候,看到了一个 new Set 的,然后有一段简化的代码一直看不懂,有没有厉害的给我拆一下,给我看一下是怎么简化的
some里面应该是个匿名函数吧,然后里面是个闭包还是什么,麻烦请求一下,看一下怎么分解的
const findSum = (arr, sum) => arr.some((set => n => set.has(n) || !set.add(sum - n))(new Set))

  • 写回答

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 表示 sumarr 中所有元素做差后的结果。

    • 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
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月13日
  • 已采纳回答 8月5日
  • 创建了问题 8月4日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效