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

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


ปัญหา

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

ฟังก์ชันของเราควรจัดเรียงองค์ประกอบของอาร์เรย์ใหม่เพื่อไม่ให้สององค์ประกอบในอาร์เรย์เท่ากัน ฟังก์ชันของเราควรส่งคืนอาร์เรย์ที่จัดเรียงใหม่ เนื่องจากเป็นการรับประกันว่ามีวิธีจัดเรียงดังกล่าวอย่างน้อยหนึ่งวิธี

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

const arr = [7, 7, 7, 8, 8, 8];

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

const output = [7, 8, 7, 8, 7, 8];

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

อาจมีการจัดเรียงใหม่ที่เป็นไปได้อื่นๆ ด้วยเช่นกัน

ตัวอย่าง

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

const arr = [7, 7, 7, 8, 8, 8];
const rearrangeArray = (arr = []) => {
   const map = arr.reduce((acc, val) => {
      acc[val] = (acc[val] || 0) + 1 return acc;
   }, {});
   const keys = Object.keys(map).sort((a, b) => map[a] - map[b]);
   const res = [];
   let key = keys.pop();
   for(let i = 0; i < arr.length; i += 2){
      if(map[key] <= 0){
         key = keys.pop();
      };
      map[key] -= 1;
      res[i] = Number(key);
   };
   for(let i = 1; i < arr.length; i += 2){
      if(map[key] <= 0){
         key = keys.pop();
      };
      map[key] -= 1;
      res[i] = Number(key);
   };
   return res;
};
console.log(rearrangeArray(arr));

ผลลัพธ์

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

[ 8, 7, 8, 7, 8, 7 ]