不用循环创建一个长为n各项都为m的数组 问题的引申
原来面试遇到过这个题, 当时我的答案大概是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
6Array.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
4new Array(m).fill('n')
Array.from({length: m}).fill('n')
m.repeat(n).split('')
new Array(m+1).join('n').split('')
OVER