เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของจำนวนเต็มเป็นอาร์กิวเมนต์เท่านั้น
ฟังก์ชันควรจัดเรียงจำนวนเต็มที่มีอยู่ในอาร์เรย์ในลำดับที่เพิ่มขึ้นโดยยึดตาม 1 ที่มีอยู่ในการแทนค่าไบนารี หากจำนวนตั้งแต่สองตัวขึ้นไปมีจำนวน 1s เท่ากันในเลขฐานสองของพวกมัน ควรจัดเรียงตามลำดับที่เพิ่มขึ้นตามขนาดของมัน
ตัวอย่างเช่น −
หากอาร์เรย์อินพุตเป็น −
const arr = [34, 37, 23, 89, 12, 31, 23, 89];
จากนั้นอาร์เรย์เอาต์พุตจะเป็น −
const output = [34, 12, 37, 23, 89, 23, 89, 31];
ตัวอย่าง
ต่อไปนี้เป็นรหัส -
const arr = [34, 37, 23, 89, 12, 31, 23, 89]; const sortByBinary = (arr = []) => { const calculateOne = (str = '') => { let res = 0; for(let i = 0; i < str.length; i++){ if(str[i] === '1'){ res++; }; }; return res; } const sorter = (a, b) => { const firstCount = calculateOne((a >>> 0).toString(2)); const secondCount = calculateOne((b >>> 0).toString(2)); return firstCount - secondCount; }; arr.sort(sorter); }; sortByBinary(arr); console.log(arr);
ผลลัพธ์
ต่อไปนี้เป็นเอาต์พุตคอนโซล -
[ 34, 12, 37, 23, 89, 23, 89, 31 ]