在es6中操作映射函数(x,y,z)

时间:2017-07-21 09:49:38

标签: javascript ecmascript-6

我是初学者es6,这是我希望回答的问题。

我不明白以下代码的操作。该功能如何运作?

<script>
    var numbers = [1, 2 ,3];
    a = numbers.map(function(x, y , z){
        return x + y + z;
    });
    console.log(a); 
</script>

为什么只打印更改元素(x -'1')?为什么改变呢? 这是结果:

["11,2,3", "31,2,3", "51,2,3"]

2 个答案:

答案 0 :(得分:2)

.map的语法是:

  

.map(currentElement,index,array)

所以你的第一次迭代看起来像是:

  

1 + 0 +&#34; 1,2,3&#34;

为什么"1,2,3" ?因为当您对Objects进行算术运算时,它会尝试将值转换为数字,如果失败,它将返回object.toString()。对于数组,.toString将返回以逗号分隔的元素列表。

现在为什么11,2,331,2,3

这是因为,plus运算符(+)也有对concat字符串的覆盖。

所以它将返回x + y的算术和,因为它们都是数字,并且会与z连接,因为z是一个字符串。因此,

  

1 + 0 +&#34; 1,2,3&#34; =&GT; 1 +&#34; 1,2,3&#34; =&GT; &#34; 11,2,3&#34;

     

2 + 1 +&#34; 1,2,3&#34; =&GT; 3 +&#34; 1,2,3&#34; =&GT; &#34; 31,2,3&#34;

     

3 + 2 +&#34; 1,2,3&#34; =&GT; 5 +&#34; 1,2,3&#34; =&GT; &#34; 51,2,3&#34;

答案 1 :(得分:0)

代码不是很有用。它的工作原理如下:

map回调中获得的x,y和z的值为:

  • x:数组元素的值(1,然后是2,然后是3)
  • y:数组中出现该值的索引(0,然后是1,然后是2)
  • z:数组本身([1, 2, 3]

如果你添加这三个值,你会得到这个:

  • x+y:在第一次迭代中变为1 + 0,在第二次迭代中变为2 + 1,在第三次迭代中变为3 + 2
  • x+y+z:触发将数组(z)转换为字符串"1,2,3"。将此结果添加到x+y的结果将触发将先前结果转换为字符串,即第一次迭代中的"1"。然后将两者连接起来,因此在第一次迭代中,您得到"11,2,3"。所以11真的是1(x+y),然后是1,2,3z)。