Javascript 在lodash尝试正确格式化数组时使用GroupBy时遇到问题
我想获取一个用户列表,并将它们分类到一个新的数组中,以由我的应用程序呈现 我得到的是:Javascript 在lodash尝试正确格式化数组时使用GroupBy时遇到问题,javascript,arrays,lodash,Javascript,Arrays,Lodash,我想获取一个用户列表,并将它们分类到一个新的数组中,以由我的应用程序呈现 我得到的是: OnlineList = [ { "Role": "Adjuster", "AccountId": "4", "UserId": "1e72d58e", "DisplayName": "Big Bob", }, { "Role": "Adviser", "AccountId": "5", "UserId": "a0daba73", "
OnlineList = [
{
"Role": "Adjuster",
"AccountId": "4",
"UserId": "1e72d58e",
"DisplayName": "Big Bob",
},
{
"Role": "Adviser",
"AccountId": "5",
"UserId": "a0daba73",
"DisplayName": "Sassy Sally",
}
];
我想要什么结果:
OnlineUsers = {
"Dealership": [
{
"Role": "Adviser",
"AccountId": "Dealership",
"UserId": "a0daba73",
"DisplayName": "Sassy Sally",
}
],
"ClaimsCo": [
{
"Role": "Adjuster",
"AccountId": "ClaimsCo",
"UserId": "1e72d58e",
"DisplayName": "Big Bob",
}
]
}
结果我得到:
OnlineUsers = {
"5": [ <----------- Problem
{
"Role": "Adviser",
"AccountId": "5", <----------- Problem
"UserId": "a0daba73",
"DisplayName": "Sassy Sally",
}
],
"ClaimsCo": [
{
"Role": "Adjuster",
"AccountId": "Dealership",
"UserId": "1e72d58e",
"DisplayName": "Big Bob",
}
]
}
在线用户={
“5”:[
//从API请求加载到数组中
var OnlineList=[];
//为显示而排序和排序
var OnlineUsers=[];
在线列表=[{
“角色”:“调节器”,
“AccountId”:“4”,
“用户ID”:“1e72d58e”,
“DisplayName”:“大鲍勃”,
},
{
“角色”:“顾问”,
“帐户ID”:“5”,
“用户ID”:“a0daba73”,
“DisplayName”:“Sassy Sally”,
}
];
//分组功能:https://stackoverflow.com/questions/14446511/most-efficient-method-to-groupby-on-an-array-of-objects/43215522
让groupBy=function(xs,key){
返回x.reduce(功能(rv,x){
(rv[x[键]]=rv[x[键]| |[])。按(x);
返回rv;
}, {});
};
//模拟按Id获取API服务
让accountService=(id)=>{
如果(id==4){
返回“ClaimsCo”
}否则{
返回“经销商”
}
}
//传入帐户ID
让getAccountName=函数(int,元素){
var accountName=“”;
//从Id获取AccountName
accountName=accountService(int);
//检查帐户ID
if(OnlineList[element].hasOwnProperty('AccountId')){
//将AccountId值设置为AccountName
OnlineList[element].AccountId=accountName;
//将结果分组并设置为OnlineUsers数组
OnlineUsers=groupBy(OnlineList,'AccountId');
}
};
对于(var x=0;x
您需要用名称映射并替换AccountId
编号,然后按名称分组。我使用\uuuu.flow()
创建管道:
const{flow,partiOK:pr,map,groupBy}=;
//模拟按Id获取API服务
const accountService=(id)=>id==4?“ClaimsCo.”:“经销商”;
常数fn=流量(
pr(map,o=>({…o,AccountId:accountService(+o.AccountId)})),//将AccountId替换为+运算符转换为数字的名称
pr(groupBy,'AccountId'),//按新AccountId分组
)
const OnlineList=[{“角色”:“调节器”,“帐户ID”:“4”,“用户ID”:“1e72d58e”,“显示名”:“大鲍勃”},{“角色”:“顾问”,“帐户ID”:“5”,“用户ID”:“a0daba73”,“显示名”:“Sassy Sally”}];
//结果
const OnlineUsers=fn(OnlineList);
console.log(在线用户);
问题已经得到了回答,但我有一个不同的解决方案想与大家分享
我最近创建了一个用JavaScript进行数组分类的库,名为
以下是使用它的解决方案:
const { categorize } = require("categorize");
const onlineList = [
{
"Role": "Adjuster",
"AccountId": "4",
"UserId": "1e72d58e",
"DisplayName": "Big Bob",
},
{
"Role": "Adviser",
"AccountId": "5",
"UserId": "a0daba73",
"DisplayName": "Sassy Sally",
}
];
const categories = [
{ name: "Dealership", filter: ({ AccountId }) => AccountId === "4" },
{ name: "ClaimsCo", filter: ({ AccountId }) => AccountId === "5" },
];
const onlineUsers = categorize(onlineList, categories);
onlineUsers
变量将包含以下对象:
{
"Dealership": [
{
"Role": "Adjuster",
"AccountId": "4",
"UserId": "1e72d58e",
"DisplayName": "Big Bob"
}
],
"ClaimsCo": [
{
"Role": "Adviser",
"AccountId": "5",
"UserId": "a0daba73",
"DisplayName": "Sassy Sally"
}
]
}
哇,你简化了很多解决方案。不过,我很难阅读和理解你的代码。有没有关于学习javascript函数编程的源代码的建议?谢谢你的解决方案和帮助!从阅读lodash的流和Party开始,好吧,如果你有任何问题,我很乐意帮助你。下面是一个a关于使用lodash/fp进行函数编程。它主要也适用于lodash,但您需要在函数上使用.partiOK()
或.curryRight()
。太棒了。非常感谢您的见解!我等不及要更好地使用JS了。