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

เปรียบเทียบสองอ็อบเจ็กต์ใน JavaScript และส่งคืนตัวเลขระหว่าง 0 ถึง 100 แทนเปอร์เซ็นต์ของความคล้ายคลึงกัน


สมมุติว่าเรามีวัตถุสองอย่างนี้ −

const a = {
   Make: "Apple",
   Model: "iPad",
   hasScreen: "yes",
   Review: "Great product!",
};
const b = {
   Make: "Apple",
   Model: "iPad",
   waterResistant: false
};

เราจำเป็นต้องเขียนฟังก์ชันที่นับจำนวนคุณสมบัติทั่วไปในออบเจกต์ (โดยคุณสมบัติทั่วไปหมายถึงมีทั้งคีย์และค่าเท่ากัน) และส่งกลับตัวเลขระหว่าง 0 ถึง 100 (รวมทั้งสองอย่าง) ซึ่งแสดงถึงเปอร์เซ็นต์ของความคล้ายคลึงกันระหว่างวัตถุ เหมือนกับว่าไม่มีคู่คีย์/ค่าที่ตรงกัน มันจะเป็น 0 ถ้าตรงกันทั้งหมดมันจะเป็น 100

ในการนับเปอร์เซ็นต์ของความคล้ายคลึงกัน เราสามารถแบ่งจำนวนคุณสมบัติที่คล้ายกันด้วยจำนวนคุณสมบัติในวัตถุที่เล็กกว่า (วัตถุที่มีคู่คีย์/ค่าน้อยกว่า) และคูณผลลัพธ์นี้ด้วย 100

ดังนั้น เมื่อเข้าใจแล้ว เรามาเขียนโค้ดสำหรับฟังก์ชันนี้กัน −

ตัวอย่าง

const a = {
   Make: "Apple",
   Model: "iPad",
   hasScreen: "yes",
   Review: "Great product!",
};
const b = {
   Make: "Apple",
   Model: "iPad",
   waterResistant: false
};
const findSimilarity = (first, second) => {
   const firstLength = Object.keys(first).length;
   const secondLength = Object.keys(second).length;
   const smaller = firstLength < secondLength ? first : second;
   const greater = smaller === first ? second : first;
   const count = Object.keys(smaller).reduce((acc, val) => {
      if(Object.keys(greater).includes(val)){
         if(greater[val] === smaller[val]){
            return ++acc;
         };
      };
      return acc;
   }, 0);
   return (count / Math.min(firstLength, secondLength)) * 100;
};
console.log(findSimilarity(a, b));

ผลลัพธ์

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

66.66666666666666

เนื่องจากวัตถุที่มีขนาดเล็กกว่ามีคุณสมบัติ 3 ประการ โดย 2 ประการเป็นสมบัติทั่วไป ซึ่งมีค่าประมาณ 66%