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

การคืนค่าทศนิยมที่มีบิต 1 เฉพาะดัชนีที่ระบุโดยอาร์เรย์ใน JavaScript

ปัญหา

เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์จำนวนเต็มบวกที่ไม่ซ้ำกัน ฟังก์ชันควรคืนค่าจำนวนเต็ม 32-bit ที่ในรูปแบบทวินิยมมีบิต 1 เฉพาะที่ดัชนี (นับจากขวา) ที่ระบุในอาร์เรย์

ตัวอย่าง

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

const arr = [1, 2, 0, 4];
const buildDecimal = (arr = []) => {
  const bitArr = Array(31).fill(0);
  let res = 0;
  arr.forEach(el => {
    bitArr.splice((31 - el), 1, 1);
  });
  bitArr.forEach((bit, index) => {
    res += (2 * (31 - index) * bit);
  });
  return res;
};
console.log(buildDecimal(arr));

ผลลัพธ์

14

คำอธิบายเพิ่มเติม

ดัชนี [1,2,0,4] หมายถึงบิตที่ 0,1,2,4 ตั้งค่าเป็น 1: binary 1110 = 14 (8+4+2) โค้ดตัวอย่างซับซ้อนเกินไป สามารถทำได้ง่ายด้วย `arr.reduce((sum, bit) => sum | (1 << bit), 0)`