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

ปรับสมดุลสองอาร์เรย์ใน JavaScript


ปัญหา

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

ผลรวมขององค์ประกอบใน arr1 และ arr2 ต่างกัน ฟังก์ชันของเราควรเลือกหนึ่งองค์ประกอบจากอาร์เรย์แรกและผลักลงในอาร์เรย์ที่สอง และเลือกหนึ่งองค์ประกอบจากอาร์เรย์ที่สองและผลักลงในอาร์เรย์แรกเพื่อให้ผลรวมขององค์ประกอบของอาร์เรย์ทั้งสองมีค่าเท่ากัน เราควรคืนค่าอาร์เรย์ขององค์ประกอบทั้งสองนี้

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

ป้อนข้อมูล

const arr1 = [1, 2, 5];
const arr2 = [2, 4];

ผลผลิต

const output = [5, 4];

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

เพราะถ้าเราลบ 5 ออกจาก arr1 แล้วผลักไปที่ arr2 และลบ 4 ออกจาก arr2 แล้วผลักไปที่ arr1 ผลรวมของอาร์เรย์ทั้งสองจะเท่ากัน (7)

ต่อไปนี้เป็นรหัส:

ตัวอย่าง

const arr1 = [1, 2, 5];
const arr2 = [2, 4];
const balanceArrays = (arr1 = [], arr2 = []) => {
   const sumA = arr1.reduce((acc, v) => acc + v, 0)
   const sumB = arr2.reduce((acc, v) => acc + v, 0)
   const difference = (sumA + sumB) / 2 - sumA
   const map = arr2.reduce((acc, v) => {
      acc[v] = true
      return acc
   }, {})
   for(let i = 0; i < arr1.length; i++) {
      if(map[arr1[i] + difference] === true) {
         return [arr1[i], arr1[i] + difference]
      }
   }
   return []
};
console.log(balanceArrays(arr1, arr2));

ผลลัพธ์

[5, 4]