Computer >> Máy Tính >  >> Lập trình >> Javascript

Điền vào các giá trị số bị thiếu trong một mảng JavaScript

Chúng ta được cho một mảng gồm n mục, trong đó chỉ có 2 mục là Số, tất cả các mục nhập khác đều rỗng. Một cái gì đó như thế này -

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

Chúng ta phải viết một hàm nhận trong mảng này và hoàn thành chuỗi số học mà hai số này là một phần. Để hiểu vấn đề này rõ ràng hơn, chúng ta có thể coi các giá trị null này là khoảng trống, nơi chúng ta cần điền các số để toàn bộ mảng có thể tạo thành một cấp số cộng.

Giới thiệu về Tiến trình số học

Một chuỗi / mảng số được cho là sẽ tạo thành một cấp số cộng nếu bất kỳ số tùy ý nào từ mảng được tạo 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ó được bằng cách thêm một hằng số (trong trường hợp này là 1) vào số bắt buộc 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 chuỗi như vậy được quy ước là a và số trong mỗi số lũy tiến không đổi, hiệu số chung, được ký hiệu là d.

Do đó, nếu chúng ta biểu thị phần tử thứ n của bất kỳ chuỗi nào như vậy bằng Tn thì

Tn = a + (n -1)d

Trong đó, n là chỉ số dựa trên 1 của số đó.

Với những điều này rõ ràng, hãy viết mã cho sự cố mà chúng tôi vừa mô tả. Đầu tiên chúng ta sẽ cố gắng tìm phần tử đầu tiên (a) và điểm khác biệt chung (d) cho mảng. Sau khi có những thứ đó, chúng tôi sẽ chạy một vòng lặp trên mảng ban đầu để tạo chuỗi.

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

Đầu ra

Đầu ra trong bảng điều khiển 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
]