使用Array.prototype.fill()

时间:2018-02-20 20:25:47

标签: javascript arrays

我是JS的新手,也是ES6中一些非常有用的功能。我正在尝试更多地了解如何使用填充创建范围,并且我已经根据一些示例获得了以下代码以我想要的方式工作但是我不理解它是如何工作的。当我在控制台中打印出prevYear和nextYear的值时,我可以看到nextYear每次增加1,从而使年份增加。这太棒了但是,我想知道如果我没有为它设置任何价值,那么nextYear是如何运作的。我尝试在prevYear中添加1,但它不会以正确的方式工作。这里我的代码更清晰:

startYear = 1900 EndYear = 1910

//此代码返回= [1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910]

    var yearsRange = Array(endYear - startYear + 1).fill(startYear).map((prevYear,nextYear) => prevYear + nextYear);  

将此代码更改为:

对我来说更有意义
var yearsRange = Array(endYear - startYear + 1).fill(startYear).map((prevYear) => prevYear += 1);  

//这将返回[1901,1901,1901,1901,1901,1901,1901,1901,1901,1901,1901]

为什么?

2 个答案:

答案 0 :(得分:0)

这些参数非常有名。 prevYearnextYear毫无意义(当然,将它们加在一起也不会)。

var yearsRange = Array(endYear - startYear + 1)
  .fill(startYear)
  .map((startYear, index) => startYear + index); 

答案 1 :(得分:0)

回调是一种功能。运行函数时,所有局部变量彼此独立工作。如果它有帮助,我们可以将该回调改为命名函数。

let arr = Array(11).fill(1910)

let incrementByOne = (num) => {
  return num += 1
}

console.log(arr.map((num) => incrementByOne(num)))

每次运行incrimentByOne时,它都会接受数组中的值,该值始终为1990