Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

เติมค่าตัวเลขที่หายไปในอาร์เรย์ 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

ดังนั้น หากเราแสดงองค์ประกอบที่ n ของชุดแบบนี้ด้วย Tn แล้ว

Tn = a + (n -1)d

โดยที่ n คือดัชนีแบบ 1-based ของตัวเลขนั้น

เมื่อเข้าใจเรื่องนี้แล้ว มาเขียนโค้ดสำหรับปัญหาที่อธิบายไว้ เราจะหาองค์ประกอบแรก (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 ]