Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

JavaScript 배열에서 누락된 숫자 값 채우기

<시간/>

n 항목의 배열이 제공되며 그 중 2개만 숫자이고 다른 항목은 모두 null입니다. 이런 것 -

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

우리는 이 배열을 취하고 이 두 숫자가 일부인 산술 시리즈를 완성하는 함수를 작성해야 합니다. 이 문제를 보다 명확하게 이해하기 위해 이러한 null 값을 전체 배열이 산술 진행을 형성하도록 숫자를 채워야 하는 공백으로 생각할 수 있습니다.

산술 진행 정보

숫자의 시리즈/배열은 (n-1)번째 숫자에 상수 d를 더하여 배열에서 임의의 숫자 n이 생성되는 경우 산술 수열을 형성한다고 합니다.

예 -

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로 표시합니다.

따라서 이러한 계열의 n번째 요소를 Tn으로 표시하면

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
]