返回除具有多个值的对象数组中首次出现以外的所有重复项

时间:2019-02-14 18:02:26

标签: javascript node.js algorithm

我希望能够遍历对象数组并通过选择多个值作为检查对象返回除对象的第一个实例以外的所有重复结果。

这是我的尝试:

SessionToken

3 个答案:

答案 0 :(得分:2)

您可以使用Array#slice

使用数组的副本
  

slice() 方法将数组的一部分的浅表副本返回到从开始到结束(不包括end)选择的新数组对象中。原始数组将不会被修改。

function getDuplicates(arry) {
    ...
    arry.slice(1, ).forEach((item, index) => {
    ...
        }
    });

    return duplicates;
}

答案 1 :(得分:0)

您可以将forEach与数组和对象一起使用。

保持所需输出的数组,保持跟踪元素首次出现的对象。

const things =[{location:'Lynnwood,Wa',keyword:'VideoProduction',user:null,profile:null,id:'5c659a55783fad6667853dd4'},{location:'LasVegas',keyword:'Cleaners',user:null,profile:null,id:'5c6597e4783fad6667853d8b'},{location:'LasVegas',keyword:'Cleaners',user:null,profile:null,id:'5c6597cc783fad6667853d8a'},{location:'LasVegas',keyword:'Cleaners',user:null,profile:null,id:'5c6597c7783fad6667853d89'},{location:'LasVegas',keyword:'Cleaners',user:null,profile:null,id:'5c6597c2783fad6667853d88'},{location:'LasVegas',keyword:'Cleaners',user:null,profile:null,id:'5c6597c2783fad6667853d87'},{location:'Lagos,La',keyword:'TopHome',user:null,profile:null,id:'5c659288783fad6667853d86'},{location:'Lagos,La',keyword:'TopHome',user:null,profile:null,id:'5c659219783fad6667853d84'},{location:'Lagos,La',keyword:'TopHome',user:null,profile:null,id:'5c659218783fad6667853d83'},{location:'Lagos,La',keyword:'TopHome',user:null,profile:null,id:'5c659218783fad6667853d82'}];

let desired = []
let included = {}

things.forEach((inp)=>{
  if(included[inp.keyword]){
    desired.push(inp)
  } else {
    included[inp.keyword] = true
  }
 
})

console.log(desired)

答案 2 :(得分:0)

最简单的方法是使用一个数组,该数组包含已找到的所有唯一项,基本上是作为一个集合起作用的。

关键是,如果某项不在该集合中,则将其添加到该项中,而不添加到重复项中(因为这是第一次出现,而且可能是唯一出现)。

.some数组方法实际上是用于深层对象比较的离合器(其作用类似于此处的.includes)。

考虑到这一点,下面的代码非常简单,并且可以肯定地用其他数组方法或类似方法进行压缩/增强。

let uniqueItems = []
arry.forEach(item => {
  if(uniqueItems.some(other => 
        item.location === other.location
        && .... && ... && ....
        )){
       duplicates.push(item)
  } else {
       uniqueItems.push(item)
  }
}