数组的递归筛选

数组递归筛选

根据一个值筛选出来通过 includes + 递归

const options = [{name: "ikun",options: [{name: "YAY11",},],},{name: "YAY",},
];function findValue(orgOptions,val) {let newArr1 = []orgOptions.forEach(item=>{if(item.options && item.options.length > 0){let children = findValue(item.options,val)let obj = {...item}if(children && children.length > 0){newArr1.push(obj)}}else{if(item.name.includes(val)){newArr1.push(item)}}})return newArr1
}
console.log(findValue(options,'YAY11'),'YAY11');第二种:并不确定哪个字段是数组,不管层级多深只要是数组里面字段与查找一致就把这一整条筛选出来
const options = [{name: "ikun",options: [{name: "ikun1",children:[{name:'ikun2',list:[{name:'YAY11'}]}]},],},{name: "YAY",},
];function findValue(orgOptions,val) {let newArr1 = []orgOptions.forEach(item=>{for(let i in item){if(Array.isArray(item[i])){let children = findValue(item[i],val)let obj = {...item}if(children && children.length > 0){newArr1.push(obj)}}else{if(item.name.includes(val)){newArr1.push(item)}}}})return newArr1
}
console.log(findValue(options,'YAY11'),'YAY11');

数组扁平化的方法

var array = [1,2,[3,4],[5,[6,7]]];
let arrList = []
function flat(array,arr){array.forEach(v=>{if(Array.isArray(v)){console.log(v,'v');flat(v,arr)}else{arr.push(v)}})return arr
}console.log(flat(array,arrList));

根据id进行分组

const orgArr = [{ id: '1', list: [{oid:'100001'}] },{ id: '2', list: [{oid:'100002'}] },{ id: '1', list: [{oid:'100003'}] },{ id: '1', list: [{oid:'100004'}] },]let orgtemp = []let mapid = []orgArr.forEach(v=>{if(mapid.indexOf(v.id) < 0){orgtemp.push({id:v.id,list:v.list})mapid.push(v.id)}else{orgtemp.map(t=>{if(t.id == v.id){v.list.map(n=>{t.list.push(n)})}})}})console.log(orgtemp,'orgtemp');处理后:[{id:1list:[{oid: '100001'},{oid: '100003'},{oid: '100004'},]},{id:2list:[{oid: '100002'}]}]

在这里插入图片描述

将 id 相同的数据分在同一组

  let dataArr = [{ id: 1, value: "值1" },{ id: 2, value: "值2" },{ id: 3, value: "值3" },{ id: 1, value: "值4" },{ id: 2, value: "值5" },
];
转化成如下
// [
//   {
//     data: [
//       { id: 1, value: "值1" },
//       { id: 1, value: "值4" },
//     ],
//   },
//   {
//     data:[
//       { id: 2, value: "值2" },
//		 { id: 2, value: "值5" },
//     ]
//   },
//   {
//     data:[
//       { id: 3, value: "值3" }
//     ]
//   }
// ];
let orgtemp = [];
let mapid = [];
dataArr.forEach((v) => {if (mapid.indexOf(v.id) < 0) {let obj = {data:[]};obj.data.push(v);mapid.push(v.id);orgtemp.push(obj);} else {orgtemp.map((t) => {t.data.map(n=>{if (n.id == v.id) {t.data.push(v)}})});}
});
console.log(orgtemp, "orgtemp");

在这里插入图片描述

将数组分为 n 个一组

const list1 = [{ id: 1, name: '宰父谷枫' },{ id: 2, name: '买孟' },{ id: 3, name: '疏学林' },{ id: 4, name: '次如风' },{ id: 5, name: '巧紫雪' }
];function datumGroup(list,n=4){let newArray = []for(let i=0,j=list.length;i<j;i+=n){newArray.push(list.slice(i,i+n))}return newArray
}
console.log(datumGroup(list1,2));

数组reduce方法根据数组中的某一字段分类,得到一个新数组

let arrya=[{name:'小明',class:'18'},{name:'小红',class:'18'},{name:'小王',class:'19'},
];const list2 = arrya.reduce((pre,cur,index)=>{// if(a[b.old]){//   console.log(a[b.old],'a[b.old]');// }let obj = {}if(index == 0){obj.class = cur.classobj.detail = [cur]pre.push(obj)}else{const i = pre.findIndex(item => item.class == cur.class)if(i > -1){pre[i].detail.push(cur)}else{obj.class = cur.classobj.detail = [cur]pre.push(obj)}}return pre
},[])console.log(list2,'list2');

在这里插入图片描述

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

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

相关文章

网络爬虫-网易易盾滑块验证码

首先打开易盾官网&#xff0c;依次单击“在线体验”和“滑块拼图”选项&#xff0c;出现如下图所示的滑块验证码&#xff0c;滑动后发现Network面板成功抓包。 如图所示 其中主要的加密参数可以看出来就是acToken以及cb 我们接着下断点往下走 我通过上图可以看到 acToken&#…

实例018 类似windows xp的程序界面

实例说明 在Windows XP环境下打开控制面板&#xff0c;会发现左侧的导航界面很实用。双击展开按钮&#xff0c;导航栏功能显示出来&#xff0c;双击收缩按钮&#xff0c;导航按钮收缩。下面通过实例介绍此种主窗体的设计方法。运行本例&#xff0c;效果如图1.18所示。 ​编辑…

适合小公司的自动化部署脚本

背景&#xff08;偷懒&#xff09; 在小小的公司里面&#xff0c;挖呀挖呀挖。快挖不动了&#xff0c;一件事重复个5次&#xff0c;还在人肉手工&#xff0c;身体和心理就开始不舒服了&#xff0c;并且违背了个人的座右铭&#xff1a;“偷懒”是人类进步的第一推动力。 每次想…

ROS:nodelet

目录 一、前言二、概念三、作用四、使用演示4.1案例简介4.2nodelet 基本使用语法4.3内置案例调用 五、nodelet实现5.1需求5.2流程5.3准备5.4创建插件类并注册插件5.5构建插件库5.6使插件可用于ROS工具链5.6.1配置xml5.6.2导出插件 5.7执行 一、前言 ROS通信是基于Node(节点)的…

Rsync(二十七)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、概述 二、特性 三、应用场景 四、数据的同步方式 五、rsync传输模式 六、rsync应用 七、rsync 命令 1. 格式 1.1 作为远程命令 1. 2 作为rsync服务 2. 选项 3.…

分布式定时任务组件:XXL-JOB

一、GitHub源码地址 https://github.com/xuxueli/xxl-job 二、部署文档 参考&#xff1a;https://blog.csdn.net/qq798867485/article/details/131415408 三、初始化数据库SQL 1、xxl_job_user XxlJob-用户管理 2、xxl_job_group XxlJob-执行器管理 3、xxl…

〖码银送书第三期〗《Python机器学习:基于PyTorch和Scikit-Learn》

前言 近年来&#xff0c;机器学习方法凭借其理解海量数据和自主决策的能力&#xff0c;已在医疗保健、 机器人、生物学、物理学、大众消费和互联网服务等行业得到了广泛的应用。自从AlexNet模型在2012年ImageNet大赛被提出以来&#xff0c;机器学习和深度学习迅猛发展&#xf…

性能测试:Jmeter压测过程中的短信验证码读取

目录 问题背景 解决思路 实现方法 1. 建立JDBC连接 2. 使用JDBC请求获取验证码 3. 使用正则将验证码提取并使用 总结&#xff1a; 问题背景 现如今国内的大部分软件或者网站应用&#xff0c;普遍流行使用短信业务&#xff0c;比如登录、注册以及特定的业务通知等。 对…

基于区块链技术的元宇宙游戏将成为时代浪潮的弄潮儿

区块链技术作为互联网新兴技术逐渐走进公众视野&#xff0c;其中心化、分布式、公开透明、不可篡改等技术特性使其可以在各个领域大展拳脚。区块链技术在金融、公益、文化、物流、农业等领域带来了全新的思维视角、全新的场景与全新的解决方案&#xff0c;无疑是移动互联网之后…

【Matlab】智能优化算法_麻雀搜索算法SSA

【Matlab】智能优化算法_麻雀搜索算法SSA 1.背景介绍2.数学模型3.文件结构4.伪代码5.详细代码及注释5.1 Get_Functions_details.m5.2 main.m5.3 SSA.m 6.运行结果7.参考文献 1.背景介绍 麻雀通常是群居的鸟类&#xff0c;有很多种类。它们分布在世界的大部分地区&#xff0c;喜…

GSV6201替代方案|CS5466设计资料|CS5466原理图|typec转HDMI_8k方案芯片

GSV6201是一款高性能、低功耗、高性能的&#xff0c;USB Type-C备用模式显示端口1.4至HDMI 2.1转换器。通过集成增强型微控制器&#xff0c;GSV6201创造了一个经济高效的解决方案提供了上市时间优势。显示端口接收机支持高达32.4Gbps&#xff08;HBR3&#xff0c;4通道&#xf…

springboot整合feign实现RPC调用,并通过Hystrix实现服务降级

目录 一、服务提供者 二、服务消费者 三、测试效果 四、开启Hystrix实现服务降级 feign/openfeign和dubbo是常用的微服务RPC框架&#xff0c;由于feigin内部已经集成ribbon&#xff0c;自带了负载均衡的功能&#xff0c;当有多个同名的服务注册到注册中心时&#xff0c;会根…