【问题标题】:Spread Syntax with Map and Filter使用映射和过滤器扩展语法
【发布时间】:2017-08-23 10:13:10
【问题描述】:

我发现了这个有趣的问题,并想与大家分享。 问题是:

[...[0,1,...[-1,0,1].map((x)=> x+1)].filter((x)=>x)),7]

我轻松解决了过滤器的第一部分为[0,1,(-1+1),(0+1),(1+1)] = [0,1,0,1,2]

我惊讶地发现 7 挂在最后。我认为这是一些错字,但将问题复制到控制台给了我 [1,1,2,7]。我不太明白两件事。

  • 为什么 0 被排除在过滤器之外
  • 那 7 个人在那儿做什么

【问题讨论】:

  • 0 是 Javascript falsy,因此过滤器 (x)=>x 将删除它
  • 问题是什么?我不明白代码怎么可能是一个问题......
  • 您似乎在问“为什么7 返回7?”如果这不是您要问的问题,也许您可​​以改写它...
  • 这是我最近看到的最奇怪的问题

标签: javascript arrays ecmascript-6 functional-programming spread-syntax


【解决方案1】:

代码按以下步骤计算:

[...[0, 1, ...[-1, 0, 1].map((x)=>x+1)].filter((x)=>x)), 7] // map
[...[0, 1, ...[(x=>x+1)(-1), (x=>x+1)(0), (x=>x+1)(1)]].filter((x)=>x)), 7] // function application
[...[0, 1, ...[0, 1, 2]].filter((x)=>x)), 7] // spread
[...[0, 1, 0, 1, 2].filter((x)=>x)), 7] // filter
[...[...(x=>x)(0)?[0]:[], ...(x=>x)(1)?[1]:[], ...(x=>x)(0)?[0]:[], ...(x=>x)(1)?[1]:[], ...(x=>x)(2)?[2]:[]], 7] // function application
[...[...0?[0]:[], ...1?[1]:[], ...0?[0]:[], ...1?[1]:[], ...2?[2]:[]], 7] // conditional
[...[...[], ...[1], ...[], ...[1], ...[2]], 7] // spread (from filter)
[...[1, 1, 2], 7] // spread
[1, 1, 2, 7]

【讨论】:

    【解决方案2】:
    • 这里的第一个操作是Array#map[-1, 0, 1].map(x => x + 1),它基本上将1添加到每个元素,返回[0, 1, 2]数组。

    • 下一个是Array#filter操作,[0, 1, ...[0, 1, 2]].filter(x => x)实际上返回一个新数组,没有每个falsy(false, 0, undefined, null, "")在数组之外。

    • 最后一个操作看起来像[...[1, 1, 2], 7],并用spread operator返回[1, 1, 2, 7]来摆脱嵌套数组。

    【讨论】:

      【解决方案3】:

      [...[0,1,...[-1,0,1].map((x)=> x+1)].filter((x)=>x),7]下:

      [-1,0,1].map((x)=> x+1) // [0,1,2]
      
      [0,1,...[-1,0,1].map((x)=> x+1)] // [0,1,0,1,2]
      
      [0,1,...[-1,0,1].map((x)=> x+1)].filter((x)=>x) // [1,1,2]
      
      [...[0,1,...[-1,0,1].map((x)=> x+1)].filter((x)=>x),7] // [1,1,2,7]
      

      【讨论】:

        【解决方案4】:

        这部分[-1,0,1].map((x)=> x+1) 导致此列表[0,1,2] 然后这部分[0,1,...[-1,0,1].map((x)=> x+1)] 导致[0,1,1,2] 在过滤器部分删除0 之后它导致[1,1,2],最后是列表是7。所以,结果是[1,1,2,7]

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-08-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-03
          • 2022-08-16
          • 2017-11-04
          • 1970-01-01
          相关资源
          最近更新 更多