Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Javascript中的对象数组中按键查找重复值_Javascript_Arrays - Fatal编程技术网

从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)进行过滤