关于数组中相邻元素的合并处理方法总结

这两天在开发需求的过程中,需要处理一个数组数据,对相邻元素的具有相同的点合并元素里面的数组。
我们先看一下处理的数组是什么样的

        let array = [
            {
                name: '数据来源1',
                list: [
                    {
                        dataCode: '12',
                        dataName: '照片',
                        dataSort: 20,
                        fileList: []
                    }
                ]
            }, {
                name: '数据来源2',
                list: [
                    {
                        dataCode: '13',
                        dataName: '照片',
                        dataSort: 20,
                        fileList: []
                    }
                ]
            }, {
                name: '数据来源2',
                list: [
                    {
                        dataCode: '14',
                        dataName: '照片',
                        dataSort: 20,
                        fileList: []
                    }
                ]
            }, {
                name: '数据来源3',
                list: [
                    {
                        dataCode: '15',
                        dataName: '照片',
                        dataSort: 20,
                        fileList: []
                    }
                ]
            }]

我们再看一下处理后的数组是什么样的

let array = [
            {
                name: '数据来源1',
                list: [
                    {
                        dataCode: '12',
                        dataName: '照片',
                        dataSort: 20,
                        fileList: []
                    }
                ]
            }, {
                name: '数据来源2',
                list: [
                    {
                        dataCode: '13',
                        dataName: '照片',
                        dataSort: 20,
                        fileList: []
                    },
                    {
                        dataCode: '14',
                        dataName: '照片',
                        dataSort: 20,
                        fileList: []
                    }
                ]
            },  {
                name: '数据来源3',
                list: [
                    {
                        dataCode: '15',
                        dataName: '照片',
                        dataSort: 20,
                        fileList: []
                    }
                ]
            }]

数组中两个数据来源2中的list合并到一块,并且删除了第二个数据来源2

当然这只是用简单的数据演示了一下,事实上数据中有好几个相邻的元素的name值都相同,所以这就需要我们封装一个健壮的函数来满足需求。

尝试了好几种方法,最后找到了一种简单的方法,方法如下:

        function mergeAdjacentItem(arr, type, mergeParam) {
            return arr.reduce((result, cur, index, value) => {
                if (index == 0 || cur[type] != result[result.length - 1][type]) {
                    result.push(cur)
                } else {
                    result[result.length - 1][mergeParam].push(cur[mergeParam])
                }
                return result;
            }, []);
        }

这个方法中的关键点,首先在于对reduce方法的理解,其次是需要对每次循环的数组元素做处理,然后再添加到result中。
关于reduce方法,可以看一下这篇文章:JavaScript中的reduce()的理解和示例说明

我们来看一下封装的函数的效果:

        let array = [
            {
                name: '数据来源1',
                list: [
                    {
                        dataCode: '12',
                        dataName: '照片',
                        dataSort: 20,
                        fileList: []
                    },
                    {
                        dataCode: '13',
                        dataName: '照片',
                        dataSort: 20,
                        fileList: []
                    }
                ]
            }, {
                name: '数据来源2',
                list: [
                    {
                        dataCode: '12',
                        dataName: '照片',
                        dataSort: 20,
                        fileList: []
                    },
                    {
                        dataCode: '14',
                        dataName: '照片',
                        dataSort: 20,
                        fileList: []
                    }
                ]
            }, {
                name: '数据来源2',
                list: [
                    {
                        dataCode: '12',
                        dataName: '照片',
                        dataSort: 20,
                        fileList: []
                    },
                    {
                        dataCode: '15',
                        dataName: '照片',
                        dataSort: 20,
                        fileList: []
                    }
                ]
            }, {
                name: '数据来源2',
                list: [
                    {
                        dataCode: '12',
                        dataName: '照片',
                        dataSort: 20,
                        fileList: []
                    },
                    {
                        dataCode: '16',
                        dataName: '照片',
                        dataSort: 20,
                        fileList: []
                    }
                ]
            }, {
                name: '数据来源1',
                list: [
                    {
                        dataCode: '12',
                        dataName: '照片',
                        dataSort: 20,
                        fileList: []
                    },
                    {
                        dataCode: '17',
                        dataName: '照片',
                        dataSort: 20,
                        fileList: []
                    }
                ]
            }, {
                name: '数据来源3',
                list: [
                    {
                        dataCode: '12',
                        dataName: '照片',
                        dataSort: 20,
                        fileList: []
                    }
                ]
            }, {
                name: '数据来源3',
                list: [
                    {
                        dataCode: '12',
                        dataName: '照片',
                        dataSort: 20,
                        fileList: []
                    },
                    {
                        dataCode: '18',
                        dataName: '照片',
                        dataSort: 20,
                        fileList: []
                    }
                ]
            }]
        function mergeAdjacentItem(arr, type, mergeParam) {
            return arr.reduce((result, cur, index, value) => {
                if (index == 0 || cur[type] != result[result.length - 1][type]) {
                    result.push(cur)
                } else {
                    result[result.length - 1][mergeParam].push(cur[mergeParam])
                }
                return result;
            }, []);
        }
        let array2 = mergeAdjacentItem(array, 'name', 'list')
        console.log('----------------array2----------')
        console.log(array2);

最后array2打印的效果如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/364025.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

React18-模拟列表数据实现基础表格功能

文章目录 分页功能分页组件有两种接口参数分页类型用户列表参数类型 模拟列表数据分页触发方式实现目录 分页功能 分页组件有两种 table组件自带分页 <TableborderedrowKey"userId"rowSelection{{ type: checkbox }}pagination{{position: [bottomRight],pageSi…

python 实现 macOS状态栏 网速实时显示

安装依赖包&#xff1a; pip install pillow psutil rumpsnetSpeedApp.py from PIL import Image, ImageDraw, ImageFont import psutil import rumpsclass NetSpeedApp(rumps.App):def __init__(self):super(NetSpeedApp, self).__init__("NetSpeed")self.titlese…

【javase】——类和对象

莫道桑榆晚&#xff0c;为霞尚满天。文章目录 面向对象的初步认识面向对象与面向过程什么是面向对象 类的定义和使用类的定义格式 类的实例化什么是实例化类和对象的使用 this引用什么是this引用this 引用的特性。 对象的构造以及初始化如何初始化对象构造方法首先第一&#xf…

喝汽水问题

答案&#xff1a; #include <stdio.h> int main() {int num 0; //可以喝汽水的次数int mon 20; //钱int cup 0; //瓶子数for (mon 20; mon > 0; mon--) //每次花1元钱买汽水喝{num; //可以喝汽水的次数加1cup; //瓶子数加1if (cup 2) //如果瓶子…

Common Mistakes in German

Comman Mistakes in German 1, Haus oder Hause2, ja nein oder doch(1) Positive Fragen(2) Negative Fragen 1, Haus oder Hause 2, ja nein oder doch (1) Positive Fragen (2) Negative Fragen kein / nicht P3

MySQL 可重复读隔离级别,完全解决幻读了吗?

文章目录 前言一、什么是幻读&#xff1f;二、快照读是如何避免幻读的&#xff1f;三、当前读是如何避免幻读的&#xff1f;四、幻读被完全解决了吗&#xff1f;场景1场景2 总结 前言 MySQL InnoDB 引擎的默认隔离级别虽然是「可重复读」&#xff0c;但是它很大程度上避免幻读…

qt内存自动释放的两种情况

qt内存管理机制 QObject的parent 我们时常能看到QWidget或者其他的控件的构造函数中有一项参数parent&#xff0c;默认值都为NULL&#xff0c;例如&#xff1a; QLineEdit(const QString &contents, QWidget *parent nullptr); QWidget(QWidget *parent nullptr, Qt::…

新火种AI|哄哄大模型的火爆,给了普通人AI创业破局的关键

作者&#xff1a;一号 编辑&#xff1a;美美 人们似乎更喜欢把AI当做玩具&#xff0c;而非工具。 近日&#xff0c;一款名为哄哄模拟器的AI原生应用火了&#xff0c;一天之内就吸引了60万用户。 哄哄模拟器设置了多种情侣吵架场景&#xff0c;无论你是男是女&#xff0c;都…

【甲方安全建设】DevOps初体验

文章目录 前言传统的开发方式&#xff1a;Docker-解决环境问题 DevOps-CI/CD走向流水线Jenkins工作流程Git拉取代码Maven构建打包通过SSH连接后端服务器 实现效果 DevSecOps-安全赋能关于安全平台漏洞扫描漏洞预警TODO 前言 临近春节&#xff0c;笔者经过半年北漂&#xff0c;…

基于Springboot的社区疫情防控平台

末尾获取源码作者介绍&#xff1a;大家好&#xff0c;我是墨韵&#xff0c;本人4年开发经验&#xff0c;专注定制项目开发 更多项目&#xff1a;CSDN主页YAML墨韵 学如逆水行舟&#xff0c;不进则退。学习如赶路&#xff0c;不能慢一步。 一、项目简介 以往的社区疫情防控管理…

FullStack之Django(2)模型和后台

FullStack之Django(2)模型和后台 author: Once Day date:2022年2月13日/2024年1月31日 漫漫长路&#xff0c;才刚刚开始… 全系列文档请查看专栏: FullStack开发_Once_day的博客-CSDN博客Django开发_Once_day的博客-CSDN博客 参考文档: 编写你的第一个 Django 应用&#…

第三百零一回

文章目录 1. 概念介绍2. 实现方法2.1 obscureText属性2.2 decoration属性 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何实现倒计时功能"相关的内容&#xff0c;本章回中将介绍如何实现密码输入框.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍…

配置IPv6静态路由

1、静态路由简介 静态路由是一种需要管理员手工配置的特殊路由。 静态路由在不同网络环境中有不同的目的&#xff1a; 当网络结构比较简单时&#xff0c;只需配置静态路由就可以使网络正常工作。 在复杂网络环境中&#xff0c;配置静态路由可以改进网络的性能&#xff0c;并…

SpringBoot拉取高德行政区域数据

SpringBoot拉取高德行政区域数据 一、账号申请 1.整体流程 行政区域文档&#xff1a;https://lbs.amap.com/api/webservice/guide/api/district 整体流程可参考&#xff1a;https://lbs.amap.com/api/webservice/guide/create-project/get-key 2.注册账号 注册地址&#…

揭秘2023年全球软件架构师峰会:引领未来的技术潮流与PPT宝藏!

随着科技的不断进步和创新&#xff0c;全球软件架构师峰会&#xff08;ArchSummit深圳站&#xff09;作为国际知名的技术交流盛会&#xff0c;再次吸引了全球顶尖的软件架构师和技术领袖齐聚一堂。 本次峰会不仅展示了最前沿的技术动态&#xff0c;更为参与者带来了极具价值的…

202415读书笔记|《鲸鱼安慰了大海》——我不知道你爱不爱我 湖水想被青山拥在怀里

202415读书笔记|《鲸鱼安慰了大海》——我不知道你爱不爱我 湖水想被青山拥在怀里 辑一 我们一起站在山坡上开花辑二 野花唱歌给自己听辑三 星空给我留了位置后记 《鲸鱼安慰了大海》作者燕七&#xff0c;是在一个关注的友友那里知道的这本书&#xff0c;决定读下去&#xff0c…

C++(17.5)——list模拟实现扩展

在上篇文章中&#xff0c;实现了的大部分功能以及部分迭代器。本片文章将对剩下的功能进行补充。 1. const迭代器&#xff1a; 对于上篇文章中实现的迭代器只能使用于非类型的对象。对于类型的遍历&#xff0c;则需要额外编写类型的迭代器。例如对于下面的场景&#xff1a; …

Yolo v8 入门学习之采用 coco128 数据集进行图片检测测试

示例入门代码 from ultralytics import YOLO import cv2 import matplotlib.pyplot as plt import matplotlib.image as mpimgdef test():# Create a new YOLO model from scratchmodel YOLO(yolov8n.yaml)# Load a pretrained YOLO model (recommended for training)model …

在Windows系统中执行DOS命令

目录 一、用菜单的形式进入DOS窗口 二、通过IE浏览器访问DOS窗口 三、复制、粘贴命令行 四、设置窗口风格 1.颜色 2.字体 3.布局 4.选项 五、Windows系统命令行 由于Windows系统彻底脱离了DOS操作系统&#xff0c;所以无法直接进入DOS环境&#xff0c;只能通过第三方软…

从零开始 Linux(一):基础介绍与常用指令总结

从零开始 Linux 01. 概念理解 1.1 什么是 Linux&#xff1f; Linux 是一个开源免费的 操作系统&#xff0c;具有很好的稳定性、安全性&#xff0c;且有很强的处理高并发的能力 Linux 的应用场景&#xff1a; 可以在 Linux 下开发项目&#xff0c;比如 JavaEE、大数据、Python…