สมมติว่าเราต้องเขียนฟังก์ชันที่รับอาร์เรย์ของตัวเลขและตัวเลข n โดยที่ n >= ตัวเลขใดๆ ในอาร์เรย์ ฟังก์ชันต้องแบ่งอาร์เรย์เป็นซับอาร์เรย์หากผลรวมขององค์ประกอบติดกันเกินตัวเลข n
ตัวอย่างเช่น:
// หากอาร์เรย์ต้นฉบับคือ: const arr = [2, 1, 2, 1, 1, 1, 1, 1]; // และตัวเลข n คือ 4 // ผลลัพธ์ควรเป็น: const output = [[2, 1], [2, 1, 1], [1, 1, 1]];
มาเขียนโค้ดสำหรับฟังก์ชันนี้กัน:
ตัวอย่างโค้ด
const arr = [2, 1, 2, 1, 1, 1, 1, 1];
const splitArray = (arr, num) => {
return arr.reduce((acc, val, ind) => {
let { sum, res } = acc;
if (ind === 0) {
return { sum: val, res: [[val]] };
}
if (sum + val <= num) {
res[res.length - 1].push(val);
sum += val;
} else {
res.push([val]);
sum = val;
}
return { sum, res };
}, {
sum: 0,
res: []
}).res;
};
console.log(splitArray(arr, 4));
console.log(splitArray(arr, 5));
ผลลัพธ์
ผลลัพธ์ในคอนโซลจะเป็นดังนี้:
[[2, 1], [2, 1, 1], [1, 1, 1]] [[2, 1, 2], [1, 1, 1, 1, 1]]