Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.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 在lodash尝试正确格式化数组时使用GroupBy时遇到问题_Javascript_Arrays_Lodash - Fatal编程技术网

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了。