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