首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >比较对象数组并分配相似度分数

比较对象数组并分配相似度分数
EN

Stack Overflow用户
提问于 2019-10-22 00:56:37
回答 3查看 598关注 0票数 1

我正在尝试比较两个对象数组,并根据数组中的常见项为它们分配一个相似度分数。

我能够比较数组,但在对象数组上使用相同的概念时遇到了问题。

代码语言:javascript
运行
复制
let array1 = [{key1:['item1','item2','item3','item4']},{key2:['event3','event4']}];
let array2 = [{key1:['item1','item4','item2','item8']},{key2:['event4','event2']}];

let arrayA=['item1','item2','item3','item4'];
let arrayB=['item1','item4','item2','item8'];
function SimilarityPercentage(arrayA,arrayB){
  let answer =arrayA.filter(function(item) {
     return arrayB.indexOf(item) >= 0;
  }).length
  return answer/(Math.max(arrayA.length,arrayB.length))*100
}
console.log(SimilarityPercentage(arrayA,arrayB));// 75 

给定array1和array2,我希望结果拆分出一个相似度分数,类似于上面的函数。我想用兰德指数计算:https://en.wikipedia.org/wiki/Rand_index#targetText=The%20Rand%20index%20or%20Rand,is%20the%20adjusted%20Rand%20index

EN

Stack Overflow用户

发布于 2019-10-22 01:22:46

你可以这样做:

代码语言:javascript
运行
复制
var array1 = [val1,val2,val3];
var array2 = [val1,val4,val5];
var sim = [];
var simscore = 9;

if (array1.length > array2.length) {
      for (var i = 0; i < array1.length; i++) {
            if(array1[i] == array2[i]) {
                   sim.push(i);
                   simarr = array1;
                   simscore ++;
             }
       }
}else{
       for (var i = 0; i < array2.length; i++) {
            if(array1[i] == array2[i]) {
                   sim.push(i);
                   simarr = array2;
                   simscore ++;
             }
       }
}
console.log(sim);
console.log("Percent similar: ", simscore/simarr.length);

这会将相似索引添加到数组sim中,并将相似索引的计数增加1 (总是针对较长的数组),然后打印相似百分比。

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58490921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档