从Javascript中的对象数组中按键查找重复值
我知道这个问题以前被回答过多次。 但我没有找到任何解决办法 我得到了一个带有从Javascript中的对象数组中按键查找重复值,javascript,arrays,Javascript,Arrays,我知道这个问题以前被回答过多次。 但我没有找到任何解决办法 我得到了一个带有名称属性的对象数组。我只想得到同名的对象 我的阵列的外观: [ { Name: 'test', coolProperty: 'yeahCool1' }, { Name: 'test1', coolProperty: 'yeahCool2' }, { Name: 'test2', coolProperty: 'yeahCool3' }, {
名称
属性的对象数组。我只想得到同名的对象
我的阵列的外观:
[
{
Name: 'test',
coolProperty: 'yeahCool1'
},
{
Name: 'test1',
coolProperty: 'yeahCool2'
},
{
Name: 'test2',
coolProperty: 'yeahCool3'
},
{
Name: 'test3',
coolProperty: 'yeahCool4'
},
{
Name: 'test',
coolProperty: 'yeahCool5'
}
]
所以我只想得到:
[
{
Name: 'test',
coolProperty: 'yeahCool1'
},
{
Name: 'test',
coolProperty: 'yeahCool5'
}
]
我希望有人能帮助我:)对于一个O(N)
解决方案,首先将数组减少到一个对象中,该对象计算每个名称的出现次数,然后通过出现次数为2过滤输入:
const arr=[
{
名称:'测试',
coolProperty:“yeahCool1”
},
{
名称:“test1”,
coolProperty:“yeahCool2”
},
{
名称:“test2”,
coolProperty:“yeahCool3”
},
{
名称:“test3”,
coolProperty:“yeahCool4”
},
{
名称:'测试',
coolProperty:“yeahCool5”
}
];
常量计数=arr.reduce((a,{Name})=>{
a[姓名]=(a[姓名]| | 0)+1;
返回a;
}, {});
log(arr.filter(({Name})=>counts[Name]==2))代码>您可以使用和方法来获得所需的结果
使用filter()
方法,您需要检查长度是否大于2,然后需要将其推入reduce()方法内部的新数组中
演示
const arr=[{“Name”:“test”,“coolProperty”:“yeahCool1”},{“Name”:“test1”,“coolProperty”:“yeahCool2”},{“Name”:“test2”,“coolProperty”:“yeahCool3”},{“Name”:“test3”,“coolProperty”:“yeahCool4”},{“Name”:“test”,“coolProperty”:“yeahCool5”};
让getCount=(名称)=>{
返回arr.filter(o=>o.Name==Name).length;
}
console.log(arr.reduce)(r,item)=>{
让len=getCount(item.Name);
返回r.concat(长度>1?项目:[]);
}, []));代码>我知道你已经得到了答案。因此,我考虑使用map
添加另一种方法
var counts = {};
var repeats = {};
arr.map(i => {
counts[i['Name']] = (counts[i['Name']] || []);
counts[i['Name']].push(i);
if (counts[i['Name']].length > 1) {
repeats[i['Name']] = counts[i['Name']];
}
});
console.log(repeats);
考虑到性能,这不是最好的解决方案。只是想添加一个替代方法
希望能有帮助 它适用于我的假数据样本,但不适用于我的真实数据:这是为什么?@newbieTwoPointOH如果您想要三个Marktanalyse
s,则按计数为3而不是2(或>=2而不是==2)进行过滤