比较 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)之间的数字,表示对象之间的相似度百分比。例如,如果没有任何键/值对匹配,则为 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%。
广告