2017-03-29 39 views
0

我发现了这个有趣的问题,并希望与大家分享。 的问题是:使用映射和过滤器传播运算符

[...[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]。我无法理解2件事。

  • 为什么是0的离开了过滤器的
  • 有什么7在那里做
+1

0是使用Javascript falsy,所以过滤器'(X)=> x'将删除它 – mikeapr4

+2

什么问题吗?我看不出代码是如何成为问题的...... – trincot

+0

你似乎在问:“为什么7'返回'7'?”如果这不是你想问的问题,或许你可以重新修改它...... – lonesomeday

回答

0

这部分[-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]

1

[... [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] 
0
  • 第一这里操作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]并且摆脱了嵌套数组。

0

的代码评估在下面的步骤:

[...[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]