在 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
]

更新於: 2020-08-21

405 次檢視

啟動您的 職業生涯

透過完成課程獲得認證

立即開始
廣告