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

แบ่งอาร์เรย์ 1 มิติเป็น 2 มิติใน JavaScript

เราต้องเขียนฟังก์ชันที่รับอาร์เรย์ 1 มิติเป็นอาร์กิวเมนต์ตัวแรก และตัวเลข n เป็นอาร์กิวเมนต์ตัวที่สอง และเราต้องทำ n ซับอาร์เรย์ภายในอาร์เรย์แม่ (ถ้าเป็นไปได้) และแบ่งองค์ประกอบเข้าไปตามลำดับ

** ถ้าอาร์เรย์มี 9 องค์ประกอบ และเราขอทำ 4 ซับอาร์เรย์ การแบ่ง 2 ตัวต่อซับอาร์เรย์จะได้ 5 ซับอาร์เรย์ และ 3 ตัวจะได้ 3 ซับอาร์เรย์ ดังนั้นในกรณีแบบนี้เราต้อง fallback ไปที่ระดับต่ำสุดที่ใกล้ที่สุด (3 ในกรณีนี้) เพราะเงื่อนไขคือกระจายจำนวนองค์ประกอบเท่ากันในแต่ละซับอาร์เรย์ ยกเว้นตัวสุดท้ายในบางกรณีพิเศษ

ตัวอย่างเช่น:

// หากอาร์เรย์อินพุตคือ:
const arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'];
// และตัวเลขคือ 2
// ผลลัพธ์ควรเป็น:
const output = [
  ['A', 'B', 'C', 'D', 'E'],
  ['F', 'G', 'H', 'I']
];

มาเขียนโค้ดสำหรับฟังก์ชันนี้กัน:

ตัวอย่างโค้ด

const arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'];

const splitArray = (arr, rows) => {
  const itemsPerRow = Math.ceil(arr.length / rows);
  return arr.reduce((acc, val, ind) => {
    const currentRow = Math.floor(ind / itemsPerRow);
    if (!acc[currentRow]) {
      acc[currentRow] = [val];
    } else {
      acc[currentRow].push(val);
    }
    return acc;
  }, []);
};

console.log(splitArray(arr, 2));

ผลลัพธ์

ผลลัพธ์ในคอนโซลจะเป็นดังนี้:

[ ['A', 'B', 'C', 'D', 'E'], ['F', 'G', 'H', 'I'] ]