Array.prototype.fill中Array.prototype.fill的异常行为

时间:2018-06-08 13:07:44

标签: javascript arrays iterator

我有以下功能:

const arrayOfStrings = n => new Array(n)
    .fill(new Array(2 * n - 1).fill(' '))
    .map((e, i) => e
        .fill(i, i, e.length - i)
            .join(''));

我希望在调用此arrayOfStrings(3)时,我希望它返回以下内容:

[
    '00000',
    ' 111 ',
    '  2  '
]

然而它没有,相反它返回:

[
    '00000',
    '01110',
    '01210'
]

或者,如果我从地图中删除.join('')并将e作为数组返回,则会返回:

[
    [0,1,2,1,0],
    [0,1,2,1,0],
    [0,1,2,1,0]
]

我相信的是:

    在每次迭代时,映射父数组中的每个子数组元素都在运行{li> fill map。{/ li>
  • join存在时,目标子数组(e)将作为每次迭代的字符串返回,为下一个调用fill留下一个更少的数组迭代map
  • join不存在时,所有三个e元素都保留数组,并且每次迭代都会在每个子数组上运行fill

问题

我并不特别关注如何来获得我想要的结果。我想知道为什么fill内调用map会以这种方式行事?

由于

0 个答案:

没有答案