สมมติว่าเรามีอาร์เรย์ของตัวเลขที่มี 0 และ 1:
const arr = [0, 1, 0, 1];
เราต้องเขียนฟังก์ชันอาร์เรย์ toBinary() ที่คืนค่าไบนารีที่ตรงกันสำหรับอาร์เรย์ที่ใช้
ตัวอย่างเช่น - ถ้าอาร์เรย์คือ:
const arr = [1, 0, 1, 1];
ผลลัพธ์ควรเป็น 11 เพราะการแทนค่าทศนิยมของไบนารี 1011 คือ 11
มาเขียนโค้ดสำหรับฟังก์ชันนี้กัน
วิธีที่ 1: ใช้เมธอดไลบรารี
ใน JavaScript มีเมธอด parseInt() ที่รับสองอาร์กิวเมนต์ ตัวแรกคือสตริง และตัวที่สองคือตัวเลขที่แทนฐานเฉพาะ เช่น 10 สำหรับฐานสิบ 2 สำหรับไบนารี ฟังก์ชันนี้แปลงสตริงและคืนค่าจำนวนเต็มของฐานที่ระบุ (radix)
ในกรณีของเรา การแปลงอาร์เรย์ไบนารีเป็นทศนิยม เราสามารถใช้ parseInt() ได้แบบนี้:
const arr = [1, 0, 1, 1];
const parseArray = arr => {
const binaryString = arr.join("");
return parseInt(binaryString, 2);
};
console.log(parseArray(arr));
วิธีที่ 2: Reduce อาร์เรย์
ในวิธีนี้เราวนลูปผ่านอาร์เรย์ไบนารีและสร้างทศนิยมตามตัวเลขไบนารีที่ตรงกัน เราจะใช้ left shift operator (<<) เพื่อขยับค่าสะสมไปซ้าย 1 บิตทุกครั้ง และคืนค่า bitwise OR (|) ของค่าที่ขยับแล้วและค่าปัจจุบัน
โค้ดสำหรับวิธีนี้ใช้ Bitwise Operator:
ตัวอย่างโค้ด
const arr = [1, 0, 1, 1];
const parseArray = arr => {
return arr.reduce((acc, val) => {
return (acc << 1) | val;
});
};
console.log(parseArray(arr));
ผลลัพธ์
ผลลัพธ์ในคอนโซลจะเป็นดังนี้:
11