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