数组的递归筛选

news2024/11/24 20:34:30

数组递归筛选

根据一个值筛选出来通过 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:1
	 	list:[
	 		{oid: '100001'},
		    {oid: '100003'},
			{oid: '100004'},
	 	]
	 },
	  {
	 	id:2
	 	list:[
	 		 {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.class
    obj.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.class
      obj.detail = [cur]
      pre.push(obj)
    }
  }
  return pre
},[])

console.log(list2,'list2');

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

费尔法克斯水务通过使用 Liquid UI 移动化和定制 SAP PM 来提高收入和数据完整性

背景 费尔法克斯水务是北弗吉尼亚州地区领先的水县。它是华盛顿特区大都会区的三大供水商之一。它每天为近171万居民提供2.<>亿加仑的水。它渴望坚持其愿景&#xff0c;即保持以客户为中心&#xff0c;同时帮助维持该地区的高质量生活和经济状况。 挑战 由于桌面系统&…

Druid-排查conditionDoubleConstAllow配置问题(double const condition)

Druid-排查conditionDoubleConstAllow配置问题(double const condition) 报错信息 Caused by: java.sql.SQLException: sql injection violation, dbType postgresql, druid-version 1.2.18, double const condition : SELECT * FROM test where 11 AND TRUE AND TRUE关键词&…

02-线性结构2 一元多项式的乘法与加法运算

一个小时敲&#xff0c;五分钟改错。比一年前进步还是很大的。 但是如果测试点没有提示的话&#xff0c;改到哪年就不一定了( ◔︎ ‸◔︎) 思路 多项式加法&#xff0c;极其类似Merge &#xff08;测试点2&#xff1a;系数加完要是0的话就不用添入结果多项式里了~&#xff…

业务安全分析第19期 | 今年暑假,博物馆的门票为什么抢不到?

目录 “黄牛”&#xff1a;加价代预约、加价售票、兜售野导游套餐 “黄牛”倒票带来的危害 “黄牛”为什么能够抢到票 博物馆与“黄牛”的门票攻防 “黄牛”使用的作弊软件有什么特征 技术上防范“黄牛”的作弊软件抢票 遏制“黄牛”倒票给博物馆带来的收益 随着暑期参观…

电影《碟中谍7:致命清算(上)》观后感

上周看了电影《碟中谍7&#xff1a;致命清算&#xff08;上&#xff09;》&#xff0c;从电影名称就知道&#xff0c;这部电影会有下部&#xff0c;讲述科学进步之后&#xff0c;有AI引发的技术变革&#xff0c;出现了一种AI变体叫做智体的东西&#xff0c;它有自主意思&#x…

【代码随想录 | Leetcode | 第八天】哈希表 | 有效的字母异位词 | 两个数组的交集 | 两数之和

前言 欢迎来到小K的Leetcode|代码随想录|专题化专栏&#xff0c;今天将为大家带来哈希法~有效的字母异位词 | 两个数组的交集 | 两数之和的分享✨ 目录 前言242. 有效的字母异位词349. 两个数组的交集1. 两数之和总结 242. 有效的字母异位词 ✨题目链接点这里 给定两个字符串…

【Vue/element】 el-table实现表格动态新增/插入/删除 表格行,可编辑单元格

el-table实现表格动态新增/插入/删除 表格行&#xff0c;可编辑单元格 效果如下&#xff1a; 点击“新增一行”可以在表格最后新增一行&#xff0c;单元格内容可编辑 点击绿色按钮&#xff0c;可在指定行的后面插入一行 点击红色-按钮&#xff0c;可以删除指定行 原理&#…

【Spring 】执行流程解析:了解Bean的作用域及生命周期

哈喽&#xff0c;哈喽&#xff0c;大家好~ 我是你们的老朋友&#xff1a;保护小周ღ 今天给大家带来的是 Spring 项目的执行流程解析 和 Bean 对象的6 种作用域以及生命周期&#xff0c;本文将为大家讲解&#xff0c;一起来看看叭~ 本期收录于博主的专栏&#xff1a;JavaEE_保…

那些你必须知道的4个matlab小技巧(附最新安装包)

文末福利&#xff1a;MATLAB R2022b软件安装包 MATLAB 简介 01 一、MATLAB简介 数学类科技应用软件包括数值计算&#xff08;Number Crunching&#xff09;型软件和数学分析&#xff08;Math Analysis&#xff09;型软件 数值计算型软件 它们对大批数据具有较强的管理、计…

数据仓库建设-数仓分层

数据仓库能够帮助企业做出更好的决策&#xff0c;提高业务效率和效益&#xff1b;在数据仓库建设时&#xff0c;绕不开的话题就是数仓分层。 一、数据分层的好处 1. 降低数据开发成本 通用的业务逻辑加工好&#xff0c;后续的开发任务可以基于模型快速使用&#xff0c;数据需…

分布式定时任务组件: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…

vue3+vite+pinia+vue-router+ol项目创建及配置

一、vite (一)、定义 vite官网 (二)、操作步骤 注意&#xff1a;两种方式创建目录结构一致 方式一&#xff1a;vite创建脚手架命令&#xff1a; 命令行&#xff1a;npm create vitelatest 然后选择 方式二&#xff1a;命令行直接声明带上vue 二、pinia (一)、定义 定义&#xf…

TortoiseGit 入门指南12:创建标签

前面的文章不止一次的提到过 标签 &#xff08;Tag&#xff09;&#xff0c;我们在《TortoiseGit 入门指南08&#xff1a;浏览引用以及在引用间切换》一文中知道&#xff0c;标签 是一种 引用&#xff1b;还知道每个提交都对应着一个 SHA-1 值&#xff0c;而引用就是 SHA-1 的一…

常见面试题之HashMap

1. 二叉树 1.1 二叉树概述 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只有左子节点&#xff0c;有的节…

jmeter压测过程中,ServerAgent响应异常:Cannot send data to network connection

ServerAgent异常信息&#xff1a; Cannot send data to network connection&#xff08;无法将数据发送到网络连接&#xff09; 原因&#xff1a; linux 防火墙 拦截了当前端口 解决方案&#xff1a; Linux 执行以下命令 /sbin/iptables -I INPUT -p tcp --dport 4445 -j ACC…

高压功率放大器应用场合是什么

高压功率放大器是一种能够将低电压信号转换为高电压输出信号的设备。它通常由前置放大器和功率放大级组成&#xff0c;广泛应用于雷达、医疗、半导体测试和工业自动化等领域。下面安泰电子将介绍高压功率放大器的几个主要应用场合。 一、雷达系统 雷达系统需要产生高频、高功率…

【IDEA大项目依赖分析卡死-解决方案】Processing build files for dependencies analysis...

最近一直在研究一个大型项目&#xff0c;在IDEA里面启动调试的时候&#xff0c;IDEA经常会进行Processing build files for dependencies analysis…&#xff08;处理构建文件进行依赖分析&#xff09;&#xff0c;并且在这个步骤耗时太久甚至直接卡死。经过一些排查找到了解决…

arping命令 ip地址冲突检测 根据ip查mac地址

arping命令介绍 arping 命令主要用来获取ip对应的mac地址&#xff0c;更新本地arp缓存表。平时主要用来探测ip地址是否冲突即同一个网络里&#xff0c;同一个ip不同mac地址的情况。ip地址冲突将导致网络故障。 arping常用命令参数 arping [参数] ip -U 强制更新邻近主机的a…

Android系统开发-入门篇

参见&#xff1a;[视频教程] 写给应用开发的 Android Framework 教程——玩转 AOSP 篇之 Android 系统开发工具推荐 - 掘金 前置条件&#xff1a; android系统源码位于 linux 服务器&#xff0c;ssh 地址假如为&#xff1a;test172.1.10.2本机为windows 1、本机&#xff1a; 下…

leetcode 101.对称二叉树

⭐️ 题目描述 &#x1f31f; leetcode链接&#xff1a;对称二叉树 思路&#xff1a; 这道题和 leetcode 100.相同的树 类似&#xff0c;是上一道的变形题。✨leetcode 100.相同的树 代码链接&#xff1a;【往期文章】leetcode 100.相同的树。这道题把根的左子树和右子树看作两…