Javascript
 Computer >> コンピューター >  >> プログラミング >> Javascript

JavaScriptで2つのオブジェクトを比較し、類似性のパーセンテージを表す0〜100の数値を返します


たとえば、次のような2つのオブジェクトがあります-

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%になります。


  1. JavaScriptで2つのIPアドレスの間に存在するIPアドレスの数を数える

    問題 2つのIPv4アドレスを受け取り、それらの間のアドレスの数(最初のアドレスを含み、最後のアドレスを除く)を返すJavaScript関数を作成する必要があります。 これは、それらを10進数に変換し、それらの絶対差を見つけることによって実行できます。 例 以下はコードです- const ip1 = '20.0.0.10'; const ip2 = '20.0.1.0'; const countIp = (ip1, ip2) => {    let diff = 0;    const aIp1 = ip1.s

  2. JavaScriptで素数の累乗と積として数を表す

    問題 正の整数をとるJavaScript関数を作成する必要があります。私たちの関数は、この数を素数の累乗の合計として表す必要があります。 したがって、数値nの場合、関数は次のような文字列を返す必要があります- n = "(p1**n1)(p2**n2)...(pk**nk)" ここで、p1、p2、p3..pkは素数であり、n1、n2、.. nkはそれらの非負の累乗であり、**bは累乗bを表します。 例 以下はコードです- const isPrime = num => {     for(let i = 2; i < num; i++)