การเข้ารหัส: แผ่อาร์เรย์ใน Javascript

Feb 18 2023
Flatten Array: การทำให้อาร์เรย์แบนหมายถึงการใช้อาร์เรย์ที่อาจมีอาร์เรย์ที่ซ้อนกัน (เช่น

Flatten Array:การทำให้อาร์เรย์แบนหมายถึงการนำอาร์เรย์ที่อาจมีอาร์เรย์ที่ซ้อนกัน (เช่น อาร์เรย์ภายในอาร์เรย์) และแปลงเป็นอาร์เรย์มิติเดียว กล่าวอีกนัยหนึ่ง มันเกี่ยวข้องกับการลบอาร์เรย์ที่ซ้อนกันทั้งหมดและรวมองค์ประกอบไว้ในอาร์เรย์เดียว

เราจะหารือเกี่ยวกับวิธีแก้ปัญหาต่างๆ

โซลูชันที่ 1: การใช้การเรียกซ้ำ

แผ่อาร์เรย์

รหัสกำหนดฟังก์ชันที่เรียกว่าFlattenArrayอาร์เรย์เป็นอาร์กิวเมนต์ เป้าหมายของฟังก์ชันคือการใช้อาร์เรย์ที่ซ้อนกันและส่งคืนเวอร์ชันที่แบนราบ ตัวอย่างเช่น ถ้าอินพุตเป็น[1, 2, [3, 4]]ฟังก์ชันควรส่ง[1, 2, 3, 4]คืน

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

สำหรับแต่ละองค์ประกอบในอาร์เรย์อินพุต ฟังก์ชันจะตรวจสอบว่าองค์ประกอบนั้นเป็นอาร์เรย์หรือไม่โดยใช้Array.isArrayเมธอด ถ้าองค์ประกอบเป็นอาร์เรย์ ฟังก์ชันจะเรียกตัวเองซ้ำกับอาร์เรย์ที่ซ้อนกันเป็นอาร์กิวเมนต์ และใช้วิธีconcatรวมอาร์เรย์ที่ซ้อนกันแบบแบนราบกับflatArrayอาร์เรย์ที่สร้างขึ้นที่จุดเริ่มต้นของฟังก์ชัน

หากองค์ประกอบไม่ใช่อาร์เรย์ ฟังก์ชันจะผลักองค์ประกอบไปยังไฟล์flatArray.

หลังจากประมวลผลองค์ประกอบทั้งหมดในอาร์เรย์อินพุตแล้ว ฟังก์ชันจะส่งคืนค่าflatArray.

รหัสที่สมบูรณ์:

// Flatten Array
function FlattenArray(arr) {
  var flatArray = []
  for (let i = 0; i < arr.length; i++) {
    if (Array.isArray(arr[i])) {
      flatArray = flatArray.concat(FlattenArray(arr[i]))
    } else {
      flatArray.push(arr[i])
    }
  }
  return flatArray
}

var arr = [1, 2, 3, 4, [5, 6, [7, 8]], [9]]
console.log(FlattenArray(arr))

แนวทางที่ 2: ใช้วิธีการลด

function flattenArray(arr) {
  return arr.reduce(function(flatArray, current) {
    if (Array.isArray(current)) {
      return flatArray.concat(flattenArray(current));
    } else {
      return flatArray.concat(current);
    }
  }, []);
}

var arr = [1, 2, 3, 4, [5, 6, [7, 8]], [9]];
console.log(flattenArray(arr)); // [1, 2, 3, 4, 5, 6, 7, 8, 9]

วิธีการ นี้reduceใช้สองอาร์กิวเมนต์: ฟังก์ชันการเรียกกลับและค่าเริ่มต้นสำหรับตัวสะสม ในกรณีนี้ แอคคิวมูเลเตอร์คืออาร์เรย์ว่างที่จะใช้สร้างอาร์เรย์อินพุตเวอร์ชันที่แบนราบ

ฟังก์ชันการเรียกกลับใช้สองอาร์กิวเมนต์: ค่าปัจจุบันที่กำลังประมวลผล (ซึ่งจะเป็นแต่ละองค์ประกอบของอาร์เรย์อินพุต) และค่าปัจจุบันของตัวสะสม

ภายในฟังก์ชันการโทรกลับ เราจะตรวจสอบว่าค่าปัจจุบันเป็นอาร์เรย์หรือไม่โดยArray.isArrayใช้ หากเป็นอาร์เรย์ เราจะเรียกflattenArrayซ้ำเพื่อทำให้อาร์เรย์ที่ซ้อนกันแบนราบ จากนั้นเชื่อมอาร์เรย์ที่แบนราบกับตัวสะสมโดยใช้concatเมธอด

หากค่าปัจจุบันไม่ใช่อาร์เรย์ เราก็เชื่อมมันกับตัวสะสมโดยconcatใช้

สุดท้ายreduceเมธอดจะส่งคืนค่าสุดท้ายของตัวสะสม ซึ่งจะเป็นเวอร์ชันที่แบนราบของอาร์เรย์อินพุต

ด้วยรหัสนี้ คุณควรได้รับผลลัพธ์เหมือนเดิม[1, 2, 3, 4, 5, 6, 7, 8, 9]:

หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับการเขียนโค้ดใน Javascript โปรดติดตามฉันเพื่อดูข้อมูลโค้ดและตัวอย่างเพิ่มเติม ฉันจะแบ่งปันข้อมูลอันมีค่าและเคล็ดลับเกี่ยวกับวิธีฝึกฝนภาษาให้เชี่ยวชาญและพัฒนาทักษะของคุณในฐานะนักพัฒนา ดังนั้น โปรดติดตามการอัปเดตเพิ่มเติม และมาเรียนรู้ร่วมกันต่อไป

ขอบคุณที่อ่าน ขอให้มีความสุขกับการเรียนรู้

Threading และ Multiprocessing ใน Python อธิบาย วิธีที่ง่ายที่สุดในการเข้าถึงฐานข้อมูลใน JAVA คำถามสัมภาษณ์ Java8 Stream ที่ถามบ่อยที่สุด — ตอนที่ 1 Apache Maven — สรุป