在 JavaScript 数组中填充缺失的数字值

javascriptweb developmentobject oriented programming更新于 2025/10/1 15:40:17

我们得到一个包含 n 个条目的数组,其中只有 2 个是数字,其他所有条目都是空。类似这样的 −

const arr = [null, null, -1, null, null, null, -3, 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、 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
]

相关文章


有用资源