使用reduce递归获取有多层嵌套的数组中的children

常见的多层嵌套的数组,如下

const items = [{id: 1,name: "item1",children: [{id: 11,name: "item11",children: [{id: 111, name: "item111"},{id: 112, name: "item112"}]},{id: 12,name: "item12",children: [{id: 121, name: "item121"},{id: 122, name: "item122"},{id: 123, name: "item123"}]}]},{id: 2,name: "item2"},{id: 3,name: "item3",children: [{id: 31, name: "item31"},{id: 32, name: "item32"}]}]

需求1.获取每一层级的每一项,

//方法1:数组reduce()方法
function getAllChildren(items) {return items.reduce((acc, item) => {const { children = [], ...rest } = item;return [...acc, item, ...getAllChildren(children)];}, []);
}
// 调用函数
const allChildren = getAllChildren(items);
console.log(allChildren);
//方法2:使用forEach的方法获取每一项
//首先,函数定义了一个空数组children,然后遍历传入的数组,如果当前项有children,则递归调用getAllChildren函数获取所有children,最后将当前项拼接到children数组中。最后,函数返回所有的children数据的数组。
function getAllChildren(array) {let children = [];array.forEach(item => {children.push(item);if (item.children) {children = children.concat(getAllChildren(item.children));}});return children;
}
//方法3:使用 flatMap 方法进行深度优先遍历
function getAllChildren(items) {return items.flatMap(item => {const { children = [], ...rest } = item;return [rest, ...getAllChildren(children)];});
}
// 调用函数
const allChildren = getAllChildren(items);
console.log(allChildren);

结果如下:
在这里插入图片描述

需求2.只获取每一层级中没有children的项。
代码如下:

    function getAllChildren(items){return items.reduce((pre,item)=>{// const {children=[],...rest} = item// console.log(111,children,rest)if(item.children?.length>0){ //增加条件判断,获取没有children值的项return [...pre,...getAllChildren(item.children)]}else{pre.push(item)return pre}},[])}const filterItem = this.getAllChildren(items)console.log(filterItem)

结果如下:
在这里插入图片描述
(需求2 只做了reduce方法的条件判断处理。其他方法同样添加条件判断即可)

请注意,使用递归方法时要小心,确保没有无限循环。

参考文章:https://blog.csdn.net/qq_22182989/article/details/130337404

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【问题】解决c++调用exosip是报错,无法解析的外部符号 _DnsQueryConfig@24

问题描述: error LNK2019: 无法解析的外部符号 _DnsQueryConfig24,函数 _eXosip_dnsutils_naptr 中引用了该符号 DnsQueryConfig是windowAPI,可查阅msdn。 #pragma comment(lib,"ws2_32.lib") #pragma comment(lib,"Dnsapi.…

Flutter学习8 - 网络编程 Http

1、配置 Http 依赖 Flutter 工具库搜索地址:https://pub.dev/ http最新版本查看网址: https://pub.dev/packages/http 在 pubspec.yaml 中引入 http 插件 dependencies:flutter:sdk: flutterhttp: ^0.13.4 # 请检查并使用最新版本命令行中输入 “ flut…

服务器后端是学习java还是php

没有绝对的"最好"语言,每种后端语言都有其适用的场景和特点。以下是几种常用的后端语言: 1. Java:Java是一种通用且强大的语言,广泛用于企业级应用和大型系统。它有很好的性能和可靠性,并且具有优秀的生态系…

jxls——自定义命令设置动态行高

文章目录 前言依赖引入绘制 jxls 批注的 excel 模板测试类编写自定义命令关于自动换行 前言 之前的博客中都简单说了数据的渲染和导出excel文件。包括固定的 表头结构,以及动态 表头和表数据等方式。 本篇博客主要说明自定义命令的方式,控制输出excel文…

线上问题——学习记录幂等判断失效问题分析

一、业务流程 上图是对save和saveScore两个接口的流程抽象,save是上传答题数据,saveScore则是上传答题分数,为保证幂等和防止并发调用,这两个接口都加了分布式锁(还是两层哦)。第一层使用的是不同的锁&…

NXP实战笔记(十一):32K3xx基于RTD-SDK在S32DS上配置LPSPI(同步、异步、DMA、主机、从机、中断、轮询)

目录 1、概述 2、RTD-SDK配置 2.1、配置目标 2.2、主、从机引脚配置 2.3、时钟配置 2.4、LPSPI配置 2.5、中断配置 2.6、DMA配置(使用DMA才会配置) 2、dma Logic Instance 2.7、RM配置(使用DMA的情况下必须配置此选项) 3、代码实现 1、概述 S32K3_低功耗LPSPI轮询…

【源码】imx6ull实现触摸屏单点实验-移植tslib和qt

一、本实验实验的器材: 1.正点原子imx6ull的阿尔法开发板v2.2 2.屏幕ALIENTEK 4.3 RGBLCD 二、实验已经移植好的文件: 仓库代码:https://gitee.com/wangyoujie11/atkboard_-linux_-driver.git 1.文件说明 arm-qt.tar.bz2:移植好的…

基于springboot的粮食仓库管理系统(源码+论文)

目录 前言 一、功能设计 二、功能实现 三、库表设计 四、论文 前言 随着我国粮食产量的逐年提升,传统的粮食仓库管理模式已经无法适应当前仓储管理的应用需求,互联网系统平台的发展以及系统化管理模式的普及,粮仓的管理也由传统的人工统…

Cmake的使用

第一步:安装Cmake 双击点开即可,无脑下一步。 第二步:编写一个简单的Cmake项目 CMakeLists.txt文件 # 设置最低的 CMake 版本要求 cmake_minimum_required(VERSION 3.10)# 设置项目名称 project(MyProject)# 添加可执行文件 add_executabl…

SUSE12系统破解root密码

SUSE12系统破解root密码 1、重启系统,重启时出现引导界面,按e 2、在启动 linux 的启动选项里加上 init/bin/bash,然后按 F10 启动,通过给内核传递 init/bin/bash 参数使得 OS 在运行 login 程序之前运行 bash,出现命令…

【力扣白嫖日记】626.换座位

前言 练习sql语句,所有题目来自于力扣(https://leetcode.cn/problemset/database/)的免费数据库练习题。 今日题目: 626.换座位 表:Seat 列名类型idintstudentvarchar id 是该表的主键(唯一值&#xf…

Uni-ControlNet: All-in-One Control toText-to-Image Diffusion Models——【论文笔记】

本文发表于NeurIPS 2023 项目官网:Uni-ControlNet: All-in-One Control to Text-to-Image Diffusion Models 一、Introduction 近两年来,扩散模型在图像合成任务中表现优异,尤其是文本到图像(T2I)扩散模型已成为合成高…