原来面试遇到过这个题, 当时我的答案大概是

1
2
3
4
// 第一种
new Array(n).fill(m)
// 第二种
[...new Array(n)].map(ele => m)

但是第二种其实也是一种循环, 类似的, 还有以下这种方法:

1
Array.from({length: n}, ele => m)

深究起来, 用map, reduce类似的数组方法可以有很多方式来解决问题, 这在于js对数组空位是如何处理的, forEach, filter, reduce, every, some方法都会跳过空位, map方法会跳过空位, 但是保留空位的值, 而join会把空位视为undefined, 而undefined又会被视为空字符串. 在es6中, 明确将空位转为undefined, 所以如果使用如下方法后面再加map就可以”伪”解决这个问题, 毕竟题目不能用loop :(

1
2
3
4
5
6
Array.from(new Array(n))
[...new Array(n)]
Object.entries(new Array(n))
Object.keys(new Array(n))
Object.values(new Array(n))
// 等等

不过毕竟都说不用循环了嘛, 如果什么循环都不用怎么解决呢
我想到的方法有以下几种:

1
2
3
4
new Array(m).fill('n')
Array.from({length: m}).fill('n')
m.repeat(n).split('')
new Array(m+1).join('n').split('')

OVER