注 本文所有的程式碼的前提是
let a = 3
let b = 9複製程式碼
並且示例程式碼都會return結果陣列
問題
前幾天一個朋友問的問題
已知陣列的起始數字,生成一個公差為1的等差數列
基礎方法
題目很簡單,最簡單的辦法就是使用for迴圈
let arr = []
for (let i = 0; i < b - a + 1; i++) {
arr.push(i + a)
}
return arr複製程式碼
進階
之後再想起來時感覺之前的方法有點愚蠢,遂又想出這些方法
陣列空位
join()和toString()會將空位視為undefined(字串形式):
// 拼接 > 分割 > map
Array(b - a + 1).join(' ').split(' ').map((e, i) => a + i)
// 轉字串 > 分割 > map
Array(b - a + 1).toString().split(',').map((e, i) => a + i)複製程式碼
利用Array.from方法實現:
// 空陣列轉真陣列
Array.from(Array(b - a + 1)).map((e, i) => a + i)
// 類似陣列的物件轉陣列
Array.from({ length: b - a + 1 }).map((e, i) => a + i)
Array.from({ length: b - a + 1 }, (e, i) => a + i)複製程式碼
ES6的擴充套件運算子還可以幫我們更方便地完成這件事
[...Array(b - a + 1)].map((e, i) => a + i)複製程式碼
fill()、entries()、keys()方法也不會忽略空位
Array(b - a + 1).fill(' ').map((e, i) => a + i)
[...Array(b - a + 1).entries()].map(e => e[0] + a)
[...Array(b - a + 1).keys()].map(e => e + a)複製程式碼
還有其他的途徑可以完成這件事,比如findIndex()、find()、for...of等,這幾個方法實現起來也不夠簡單,就不多餘贅述了
我個人更喜歡擴充套件運算子的方式,更短更簡單。