javascript 生成簡單等差數列

D2開源組發表於2017-11-28

注 本文所有的程式碼的前提是

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等,這幾個方法實現起來也不夠簡單,就不多餘贅述了

我個人更喜歡擴充套件運算子的方式,更短更簡單。

相關文章