Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

จัดกลุ่มค่าในอาร์เรย์ด้วยสองคุณสมบัติ JavaScript


เรามีอาร์เรย์ของวัตถุเช่นนี้ -

const arr =[ { ค่า:12, ช่องว่าง:1 }, { ค่า:13, ช่องว่าง:1 }, { ค่า:14, ช่องว่าง:1 }, { ค่า:15, ช่องว่าง:1 }, { ค่า:19, ช่องว่าง:2 }, { ค่า:21, ช่องว่าง:1 }, { ค่า:22, ช่องว่าง:1 }, { ค่า:23, ช่องว่าง:1 }, { ค่า:27, ช่องว่าง:1 }, { ค่า:31, ช่องว่าง:4 }, { ค่า:35, ช่องว่าง:4 }, { ค่า:39, ช่องว่าง:4 }, { ค่า:43, ช่องว่าง:1 }, { ค่า:50, ช่องว่าง:1 }, { ค่า:51, ช่องว่าง:1 }, { ค่า:52, ช่องว่าง:1 }, { ค่า:55, ช่องว่าง:1 }, { ค่า:57, ช่องว่าง:1 },];

เราจำเป็นต้องเขียนฟังก์ชันที่ใช้ในอาร์เรย์นี้และส่งกลับอาร์เรย์ใหม่โดยที่ออบเจ็กต์ที่ต่อเนื่องกันทั้งหมดที่มีค่าเท่ากับผลรวมของค่าและช่องว่างของออบเจ็กต์ก่อนหน้าต้องจัดกลุ่มเข้าด้วยกันในอาร์เรย์ย่อย

ตัวอย่างเช่น − วัตถุที่มีค่า 12 มีช่องว่าง 1 และวัตถุถัดไปมีค่า 13 ดังนั้นจะต้องจัดกลุ่มและกับวัตถุที่มีค่า 14 และ 15 และเช่นนี้

เมื่อเข้าใจปัญหาแล้ว เรามาเริ่มเขียนโค้ดสำหรับปัญหานี้กัน เราจะใช้เมธอด Array.prototype.reduce() เพื่อสร้างอาร์เรย์ที่ต้องการ -

ตัวอย่าง

const arr =[ { ค่า:12, ช่องว่าง:1 }, { ค่า:13, ช่องว่าง:1 }, { ค่า:14, ช่องว่าง:1 }, { ค่า:15, ช่องว่าง:1 }, { ค่า:19, ช่องว่าง:2 }, { ค่า:21, ช่องว่าง:1 }, { ค่า:22, ช่องว่าง:1 }, { ค่า:23, ช่องว่าง:1 }, { ค่า:27, ช่องว่าง:1 }, { ค่า:31, ช่องว่าง:4 }, { ค่า:35, ช่องว่าง:4 }, { ค่า:39, ช่องว่าง:4 }, { ค่า:43, ช่องว่าง:1 }, { ค่า:50, ช่องว่าง:1 }, { ค่า:51, ช่องว่าง:1 }, { ค่า:52, ช่องว่าง:1 }, { ค่า:55, ช่องว่าง:1 }, { ค่า:57, ช่องว่าง:1 },];const groupArray =arr => { return arr.reduce ((acc, val, ind, array) => { // ข้อมูลที่สะสมและดัชนีสุดท้ายของข้อมูลที่สะสม const { data, currentIndex } =acc; // คุณสมบัติวัตถุปัจจุบัน const { ค่าช่องว่าง } =val; // คุณสมบัติวัตถุก่อนหน้า const v =arr[ind-1]?.value; const g =arr[ind-1]?.gap; if(ind ===0 || ค่า !==v + g){ // การบันทึก ดัชนีของวัตถุสุดท้ายและผลัก subarray ใหม่ const index =data.push([val]) - 1; return { dat a, currentIndex:ดัชนี }; }; ข้อมูล[currentIndex].push(val); ส่งคืน { data, currentIndex }; }, { data:[], currentIndex:0 }).data;}console.log(groupArray(arr));

ผลลัพธ์

ผลลัพธ์ในคอนโซลจะเป็น -

[ [ { ค่า:12, ช่องว่าง:1 }, { ค่า:13, ช่องว่าง:1 }, { ค่า:14, ช่องว่าง:1 }, { ค่า:15, ช่องว่าง:1 } ], [ { ค่า:19, ช่องว่าง:2 }, { ค่า:21, ช่องว่าง:1 }, { ค่า:22, ช่องว่าง:1 }, { ค่า:23, ช่องว่าง:1 } ], [ { ค่า:27, ช่องว่าง:1 } ], [ { ค่า:31, ช่องว่าง:4 }, { ค่า:35, ช่องว่าง:4 }, { ค่า:39, ช่องว่าง:4 }, { ค่า:43, ช่องว่าง:1 } ], [ { ค่า:50, ช่องว่าง:1 }, { ค่า:51, ช่องว่าง:1 }, { ค่า:52, ช่องว่าง:1 } ], [ { ค่า:55, ช่องว่าง:1 } ], [ { ค่า:57, ช่องว่าง:1 } ]]