热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

根据ID对数组数据进行分组

通过API调用,我收到如下响应[{stationId:"10"name:"Jinbaolai"g

通过API调用,我收到如下响应

[
{
stationId: "10"
name: "Jinbaolai"
group: {id: "18",stationGroupName: "Ali"}
},{
stationId: "13"
name: "Stack"
group: {id: "18",{
stationId: "20"
name: "Overflow"
group: {id: "19",stationGroupName: "Baba"}
}
]

如您所见,前两个记录包含相同的组。我想根据分组对这些数据进行分组。例如,它看起来应该像这样

[
{
groupId: "18",groupName : "Ali",stations : [
{
stationId: "10",name: "Jinbaolai"
},{
stationId: "13",name: "Stack"
}
]
},{
groupId: "19",groupName : "Baba",stations : [
{
stationId: "20",name: "Overflow"
},]
}
]

我想在化简器中进行分组逻辑,在那里我还设置了问题开始处显示的完整数据数组。

case EVC_SUCCESS:
return {
...state,chargingStations: action.evcData.chargingStations,chargingStationGroups: //This is where my logic should go. ('action.evcData.chargingStations' is the initial data array)
tableLoading: false
}

我该怎么做?我尝试使用filter进行尝试,但未成功。


执行此操作的最好方法是使用Array.prototype.reduce()

Reduce 是一种聚合函数,您可以在其中放入一些东西并获得单个的返回值。

像我使用{}一样,最后一个参数可能会有一个起始值。
签名为reduce(fn,startingValue),其中fn是一个带有两个参数aggregatecurrentValue的函数,在此您最后返回聚合。

const groupData = (data)=> {
return Object.values(data.reduce((group,n)=>{
if (!group[n.group.id]){
group[n.group.id] = {
groupId:n.group.id,groupName: n.group.stationGroupName,stations:[]}
}
group[n.group.id].stations.push({
stationID: n.stationId,name: n.name
})
return group;
},{}))
}

这里是fiddle

,

一个简单的JS算法可以为您完成

const list = [
{
stationId: "10",name: "Jinbaolai",group: {id: "18",stationGroupName: "Ali"}
},{
stationId: "13",name: "Stack",{
stationId: "20",name: "Overflow",group: {id: "19",stationGroupName: "Baba"}
}
];
const groups = {};
list.forEach((item) => {
const groupId = item.group.id;
const group = groups[groupId] || {groupId: groupId,groupName: item.group.stationGroupName,stations: []};
group.stations.push({stationId: item.stationId,name: item.name});
groups[groupId] = group;
});
const groupedArray = Object.keys(groups).map((groupId) => groups[groupId]);
console.log(groupedArray); // This will be the output you want

,

我认为链接多个功能会起作用。


const statiOns= [
{
"stationId": 10,"name": "Jinbaolai","group": {"id": "18","stationGroupName": "Ali"}
},{
"stationId": 13,"name": "Stack","group": {"id": 18,{
"stationId": 20,"name": "Overflow","group": {"id": "19","stationGroupName": "Baba"}
}
]
const groups = _.chain(stations)
.groupBy((station) => { return station.group.id })
.map((values,key) => {
return {
"groupId": _.first(values).group.id,"groupName": _.first(values).group.id,"stations": _.map(values,(value)=>{ return { "stationId": value.stationId,"name": value.name } })
}
})
console.log("groups",groups)




推荐阅读
  • 本文总结和分析了JDK核心源码(2)中lang包下的基础知识,包括常用的对象类型包和异常类型包。在对象类型包中,介绍了Object类、String类、StringBuilder类、StringBuffer类和基本元素的包装类。在异常类型包中,介绍了Throwable类、Error类型和Exception类型。这些基础知识对于理解和使用JDK核心源码具有重要意义。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 本文介绍了一种在PHP中对二维数组根据某个字段进行排序的方法,以年龄字段为例,按照倒序的方式进行排序,并给出了具体的代码实现。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • 本文整理了常用的CSS属性及用法,包括背景属性、边框属性、尺寸属性、可伸缩框属性、字体属性和文本属性等,方便开发者查阅和使用。 ... [详细]
  • RN即ReactNative基于React框架针对移动端的跨平台框架,在学习RN前建议最好熟悉下html,css,js,当然如果比较急,那就直接上手吧,毕竟用学习前面基础的时间,R ... [详细]
  • vb.net面试题,请大家帮忙,谢谢。如果需要讲详细一点,那就加我QQ531412815第4题,潜在的错误,这里的错误不是常规错误,属于那种只有在运行是才知道的错误:Catchex ... [详细]
  • html结构 ... [详细]
  • 本文整理了Java中org.dataconservancy.ui.model.DataItem.getFiles()方法的一些代码示例,展示了DataIte ... [详细]
  • 本文整理了Java中io.netty.handler.codec.http.FullHttpRequest.content()方法的一些代码示例,展示了Fu ... [详细]
author-avatar
思念如此难受_351
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有