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 ]