Javascript 删除两个数组中的重复元素,同时分配更高的分数

Javascript 删除两个数组中的重复元素,同时分配更高的分数,javascript,Javascript,我有两个数组,其中包含如下对象 var arrayl = { 1: {url:google.com, score:0}, 2: {url:bing.com, score: 2}, 3: {url:yahoo.com, score: 0}, 4: {url:facebook.com, score: 5}, 5: {url:dopgile.com, score: 1}, 6: {url:ask.com, score: 10}, 7: {url:duckduckgo.com, scor

我有两个数组,其中包含如下对象

var arrayl = {
 1: {url:google.com, score:0},
 2: {url:bing.com, score: 2},
 3: {url:yahoo.com, score: 0},
 4: {url:facebook.com, score: 5},
 5: {url:dopgile.com, score: 1},
 6: {url:ask.com, score: 10}, 
 7: {url:duckduckgo.com, score: 10}
},

array2 = {
 1: {url:google.com, score: 2},
 2: {url:facebook.com, score: 3}, 
 3: {url:twitter.com, score: 0},
 4: {url:duckduckgo.com, score: 0},
 5: {url:mamma.com, score: 4},
 6: {url:myspace.com, score: 5}
}; 
数组1和数组2本身都有唯一的元素。然而,其中也有重复

我希望将数组2与数组1合并,以便在数组1中的重复元素出现时将其得分增加1

例如,google.com出现在数组2和数组1中。当合并过程开始时,它会将数组1的第一个元素google.com的分数从0增加到1。它不应该向其中添加array2的第一个元素,因为它是重复的

类似地,元素2、3、5、6将合并而不增加任何分数,因为数组1中没有重复项。但是,duckduckgo是一个复制品,它会将数组1[7]中duckduckgo.com的分数增加到11,而不会将其添加到数组中

最后,阵列应为:

var arrayl = {
 1: {url:google.com, score:1},
 2: {url:bing.com, score: 2},
 3: {url:yahoo.com, score: 0},
 4: {url:facebook.com, score: 5},
 5: {url:dopgile.com, score: 1},
 6: {url:ask.com, score: 10}, 
 7: {url:duckduckgo.com, score: 11}
 8: {url:facebook.com, score: 3}, 
 9: {url:twitter.com, score: 0},
 10: {url:mamma.com, score: 4},
 11: {url:myspace.com, score: 5}
},

我已尝试使用以下循环遍历数组

for(var j=0; j<10;j++) {
 for(var k=0; k<10; k++) {
  if(array1[k].url==array2[j].url){

   array1[k].changeRankScore(array1[k].score+1);

  }else{
   //this is the case where it is not the same. Ideally i should just push it to array1    but since it's a double loops, finally all the items will be added from array2 to array1 with several duplicates. 
  }
 }
}

用于(var j=0;j在第二个数组上执行单循环,而不是执行双循环。对于每个项目,检查当前项目的url是否包含在array1中-然后根据需要执行第一个或第二个大小写。这样,您只需对每个array2项执行一次操作。

创建一个对象,将url映射到array1的元素:

var a1_assoc = {};
for (var i = 0; i < array1.length; i++) {
    a1_assoc[array1[i].url] = array1[i];
}
var a1_assoc={};
对于(变量i=0;i
然后在合并步骤中使用它:

for (i = 0; i < array2.length; i++) {
    var url = array2[i].url;
    if (a1_assoc[url]) {
        a1_assoc[url].score++;
    } else {
        array1.push(array2[i]);
    }
}
for(i=0;i

如何检查?要检查项目是否在第二个数组中,我不是要再次循环吗?@Mozammil我没有太多使用javascript,但它肯定有一个
包含
索引of
获取
,这将让您通过键或值查看数组中是否存在项目?我假设您的示例结果有两个facebook.com条目这是一个错误。@Zeta这个问题不包括找到匹配元素时分数的递增。