在 JavaScript 陣列中填充缺失的數字值
給定一個包含 n 個條目的陣列,其中只有 2 個是數字,所有其他條目都是 null。類似這樣:
const arr = [null, null, -1, null, null, null, -3, null, null, null];
我們應該編寫一個函式,該函式接收此陣列並完成這兩個數字所屬的算術級數。為了更清楚地理解此問題,我們可以將這些 null 值視為空白空間,我們需要在其中填充數字,以便整個陣列形成算術級數。
關於算術級數
如果陣列中的任意數字 n 是透過將常數 d 加到第 (n-1) 個數字而形成的,則稱一系列/陣列的數字構成算術級數。
示例:
1, 2, 3, 4, 5, 6, 7, 8
這裡,每個後續數字都是透過將一個常數(在本例中為 1)新增到前一個數字而獲得的。
其他示例:
1, 1, 1, 1, 1, 1, 1, 1, 1 10, 8, 6, 4, 2, 0, -2
此類級數的第一個元素通常用 a 表示,每個數字中的常數級數,即公差,用 d 表示。
因此,如果我們用 Tn 表示任何此類級數的第 n 個元素,則:
Tn = a + (n -1)d
其中,n 是該數字的基於 1 的索引。
在弄清楚這些事情後,讓我們為我們剛剛描述的問題編寫程式碼。我們將首先嚐試找到陣列的第一個元素 (a) 和公差 (d)。一旦我們有了它們,我們將遍歷原始陣列以生成級數。
示例
const arr = [null, null, -1, null, null, null, -3, null, null, null]; const arr2 = [null, null, -1, null, null, null, 12, null, null, null, null, null, null]; const constructSeries = (arr) => { const map = { first: undefined, last: undefined }; arr.forEach((el, ind) => { if(el !== null){ if(map['first']){ map['last'] = [el, ind]; }else{ map['first'] = [el, ind]; } }; }); const { first, last } = map; const commonDifference = (last[0] - first[0])/(last[1] - first[1]); const firstElement = (first[0]) - ((first[1])*commonDifference); return arr.map((item, index) => { return firstElement + (index * commonDifference); }); }; console.log(constructSeries(arr)); console.log(constructSeries(arr2));
輸出
控制檯中的輸出將為:
[ 0, -0.5, -1, -1.5, -2, -2.5, -3, -3.5, -4, -4.5 ] [ -7.5, -4.25, -1, 2.25, 5.5, 8.75, 12, 15.25, 18.5, 21.75, 25, 28.25, 31.5 ]
廣告