Computer >> Máy Tính >  >> Lập trình >> Javascript

So sánh hai đối tượng trong JavaScript và trả về một số từ 0 đến 100 thể hiện phần trăm độ giống nhau

Giả sử, chúng ta có hai đối tượng như sau -

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

Chúng tôi được yêu cầu viết một hàm đếm số thuộc tính chung trong các đối tượng (theo thuộc tính chung, chúng tôi có nghĩa là có cả khóa và giá trị giống nhau) và trả về một số nằm trong khoảng từ 0 đến 100 (cả hai đều bao gồm) đại diện cho phần trăm độ giống nhau giữa các đối tượng. Giống như nếu không có cặp khóa / giá trị nào phù hợp thì nó sẽ là 0, nếu tất cả phù hợp thì nó sẽ là 100.

Để đếm tỷ lệ phần trăm tương tự, chúng ta có thể chỉ cần chia số thuộc tính tương tự cho số thuộc tính trong đối tượng nhỏ hơn (đối tượng có cặp khóa / giá trị nhỏ hơn) và nhân kết quả này với 100.

Vì vậy, với điều đó đã hiểu, bây giờ chúng ta hãy viết mã cho chức năng này -

Ví dụ

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));

Đầu ra

Đầu ra trong bảng điều khiển sẽ là -

66.66666666666666

Bởi vì đối tượng nhỏ hơn có 3 thuộc tính, trong đó có 2 thuộc tính phổ biến, chiếm khoảng 66%.