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

การจัดเรียงตัวเลขตามจำนวนบิต 1 ในรูปแบบทวินิยมใน JavaScript

ปัญหา

เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ตัวเลข ฟังก์ชันควรจัดเรียงตัวเลขตามจำนวนบิต 1 ในรูปแบบทวินิยม (binary representation) จากมากไปน้อย และคืนอาร์เรย์ใหม่

ตัวอย่าง

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

const arr = [5, 78, 11, 128, 124, 68, 6];
const countOnes = (str = '') => {
  let count = 0;
  for (let i = 0; i < str.length; i++) {
    const el = str[i];
    if (el === '1') {
      count++;
    }
  }
  return count;
};
const sortByHighBit = (arr = []) => {
  arr.sort((a, b) => countOnes(b.toString(2)) - countOnes(a.toString(2)));
  return arr;
};
console.log(sortByHighBit(arr));

ผลลัพธ์

[ 5, 78, 11, 128, 124, 68, 6 ]

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

โค้ดต้นฉบับมีบั๊ก: countOnes รับสตริงแต่ส่งตัวเลขเข้าไปโดยไม่แปลงเป็นทวินิยม กรณีตัวเลขมีจำนวนบิต 1 เท่ากัน ควรมีกฎสำรอง (tie-breaker) เช่น เรียงตามค่าตัวเลข