Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Điền giá trị số bị thiếu trong mảng JavaScript

Chúng ta được cho một mảng n phần tử, trong đó chỉ có 2 phần tử là số, các phần tử còn lại là null. Ví dụ:

const arr = [null, null, -1, null, null, null, -3, null, null, null];

Nhiệm vụ là viết một hàm nhận vào mảng này và hoàn thành cấp số cộng (arithmetic progression) mà hai số này là một phần. Có thể hiểu các giá trị null là khoảng trống cần điền số sao cho toàn bộ mảng tạo thành một cấp số cộng.

Về cấp số cộng

Một dãy/mảng số được gọi là cấp số cộng nếu một số bất kỳ n trong mảng được hình thành bằng cách thêm một hằng số d vào số thứ (n-1).

Ví dụ:

1, 2, 3, 4, 5, 6, 7, 8

Ở đây, mỗi số tiếp theo được lấy bằng cách thêm hằng số (1 trong trường hợp này) vào số trước đó.

Các ví dụ khác:

1, 1, 1, 1, 1, 1, 1, 1, 1
10, 8, 6, 4, 2, 0, -2

Phần tử đầu tiên của dãy thường ký hiệu bằng a và công sai (chênh lệch không đổi) ký hiệu bằng d.

Do đó, nếu ký hiệu phần tử thứ n của dãy là Tn, thì:

Tn = a + (n - 1)d

Trong đó n là chỉ số 1-based của số đó.

Với những hiểu trên, hãy viết mã cho bài toán. Chúng ta sẽ tìm phần tử đầu tiên (a) và công sai (d) cho mảng. Khi đã có chúng, chạy vòng lặp qua mảng gốc để tạo ra dãy số.

Ví 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));

Kết quả

Đầu ra trong console sẽ là:

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