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

แปลงอาร์เรย์เป็นอาร์เรย์ซับซ้อน (Complex Array) ใน JavaScript ยังไง?

สมมติว่าเราต้องเขียนฟังก์ชันที่รับอาร์เรย์ของตัวเลขและตัวเลข 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]]