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