Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

การจัดเรียงองค์ประกอบของอาร์เรย์ใน JavaScript


ปัญหา

เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของตัวเลข arr เป็นอาร์กิวเมนต์แรกและอาร์กิวเมนต์เดียว

อาร์เรย์ arr จะมีความยาวเท่ากันเสมอ

ฟังก์ชันของเราควรคืนค่าเป็น จริง หากสามารถจัดลำดับใหม่ได้เท่านั้น arr[2 * i + 1] =2 * arr[2 * i] สำหรับทุก ๆ 0 <=i

ตัวอย่างเช่น หากอินพุตของฟังก์ชันคือ −

const arr = [4, -2, 2, -4];

จากนั้นผลลัพธ์ควรเป็น −

const output = true;

คำอธิบายผลลัพธ์

เรานำสองกลุ่ม [-2,-4] และ [2,4] มาสร้างเป็น [-2,-4,2,4] หรือ [2,4,-2,-4]

ตัวอย่าง

รหัสสำหรับสิ่งนี้จะเป็น −

const arr = [4, -2, 2, -4];
const canRearrange = (arr = []) => {
   const map = arr.reduce((acc, num) => {
      acc[num] = (acc[num] || 0) + 1
      return acc
   }, {});
   const keys = Object.keys(map)
   .map(key => Number(key))
   .sort((a, b) => a - b)
   for (const key of keys) {
      if (key < 0) {
         while (map[key] > 0) {
            if (map[key / 2] > 0) {
               map[key] -= 1
               map[key / 2] -= 1
            } else {
               return false
            }
         }
      } else {
         while (map[key] > 0) {
            if (map[key * 2] > 0) {
               map[key] -= 1
               map[key * 2] -= 1
            } else {
               return false
            }
         }
      }
   }
   return true
};
console.log(canRearrange(arr));

ผลลัพธ์

และผลลัพธ์ในคอนโซลจะเป็น −

true