从数组中过滤具有给定键值的相同对象 [英] filter objects from array that have the same value at given key

查看:181
本文介绍了从数组中过滤具有给定键值的相同对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我们有一个如下所示的数组:

Let's say we have an array that looks like this:

[
    {
        id: 0,
        name: 'A'
    },
    {
        id: 1,
        name:'A'
    },
    {
        id: 2,
        name: 'C'
    },
    {
        id: 3,
        name: 'B'
    },
    {
        id: 4,
        name: 'B'
    }
]

我想只保留name键上具有相同值的对象。所以输出看起来像这样:

I want to keep only this objects that have the same value at 'name' key. So the output looks like this:

[
    {
        id: 0,
        name: 'A'
    },
    {
        id: 1,
        name:'A'
    },
    {
        id: 3,
        name: 'B'
    },
    {
        id: 4,
        name: 'B'
    }
]

我想使用lodash,但我没有看到任何方法。

I wanted to use lodash but I don't see any method for this case.

推荐答案

你可以尝试这样的事情:

You can try something like this:


  • 循环数据并创建一个包含其计数的名称列表。

  • 再次循环数据并过滤掉任何对象有计数< 2

var data = [{ id: 0, name: 'A' }, { id: 1, name: 'A' }, { id: 2, name: 'C' }, { id: 3, name: 'B' }, { id: 4, name: 'B' }];

var countList = data.reduce(function(p, c){
  p[c.name] = (p[c.name] || 0) + 1;
  return p;
}, {});

var result = data.filter(function(obj){
  return countList[obj.name] > 1;
});

console.log(result)

这篇关于从数组中过滤具有给定键值的相同对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆