Lodash或Javascript-按名称分组,然后按相等字符串分组

Lodash或Javascript-按名称分组,然后按相等字符串分组,javascript,lodash,Javascript,Lodash,我已经用lodash按userId对我的对象进行了分组,但我知道我希望它按相等的名称值再次分组 例如,我有数据: "data": [ { "name": "Red", "userId": "batman" }, { "name": "Red", "userId": "batman" }, { "na

我已经用lodash按userId对我的对象进行了分组,但我知道我希望它按相等的名称值再次分组

例如,我有数据:

"data": [
        {
            "name": "Red",
            "userId": "batman"
        },
        {
            "name": "Red",
            "userId": "batman"
        },
        {
            "name": "Blue",
            "userId": "batman"
        }
]
我想要这样的东西:

[
  {userId: "Batman",
  name: {
   "red": 2
   "blue": 1
  }}
]
基本上是为了帮助我给出一个表示,我可以从中产生如下内容:

Red - 2 - batman
Blue - 1 - batman
到目前为止,我有这个

console.log(
        chain(data)
            .groupBy("userId")
            .map((value, key) => ({ userId: key, name: value }))
            .value()
);
但这只给了我一个用户ID组

如有任何想法/帮助,将不胜感激

谢谢

更新-还需要第二个功能来解决此问题:

function filterArr(data: any, key: any){
        return data.reduce( (result: any, current: any) => {
            if(!result[current[key]]){
                result[current[key]] = 1;
            } else {
                result[current[key]] += 1;
            }
            return result;
        }, {})
    }
与:

您可以使用数组的方法来获得所需的输出

请检查以下工作代码段:

const arr=[{“name”:“Red”,“userId”:“batman”},{“name”:“Red”,“userId”:“batman”},{“name”:“Blue”,“userId”:“batman”}];
让result=arr.reduce((r,{userId,name})=>{
让rec=r.find(o=>o.userId==userId);
如果(rec){
rec.name[name]=(rec.name[name]| | 0)+1;
}否则{
r、 push({userId:userId,name:{[name]:1}});
}
返回r;
},[]);

控制台日志(结果)我已经根据您请求的对象结构为您的问题提供了解决方案

const=require(“lodash”);
常数数据=[
{
名称:“红色”,
用户标识:“蝙蝠侠”
},
{
名称:“红色”,
用户标识:“蝙蝠侠”
},
{
名称:“蓝色”,
用户标识:“蝙蝠侠”
},
{
名称:“蓝色”,
用户标识:“gangam”
}
];
让结果=[];
const grouppedData=uu.groupBy(数据,“用户ID”);
for(让用户ID在grouppedData中){
const name=grouppedData[userId]。减少(
(acc,val)=>({
…acc,
[val.name]:附件[val.name]?附件[val.name]+1:1
}),{});
结果:推({
用户ID,
名称
});
}
控制台日志(结果);

我还制作了一个工作沙盒

您可以尝试使用
reduce
,您可以发布所需的结果对象/数组吗?如果假设userId将更改而不是
batman
,那么应该输出什么?提供的
json/array
具有所有通用用户ID。上面更新的帖子是否回答了您的问题?上述内容不考虑重复项
console.log(
        chain(data)
            .groupBy("userId")
            .map((value, key) => ({ userId: key, name: filterArr(value, "name") }))
            .value()
);