js树形结构数组扁平化

这篇具有很好参考价值的文章主要介绍了js树形结构数组扁平化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

js树形结构数组扁平化 1. 树形结构 ---- > 扁平化数据

一、树形结构 ---- > 扁平化数据 (数据)

const newData: any = [
		{
			"id": "1",
			"pId": null,
			"title": "长期",
			"ywid": true,
			"children": [
				{
					"id": "3",
					"pId": "2",
					"title": "短期",
					"children": [],
					"origin": null,
					"parentId": "2",
					"projectId": "1BD75301A441F0419098AEFA0129A9B4",
					"state": "0",
					"name": "长贷",
					"financeType": null,
					"shareholderName": "魅力公司",
					"shareholderType": "0",
					"ownershipRatio": null,
					"expectedTotalAmount": 1000,
					"planTotalAmount": 900,
					"remark": "备注",
					"isAllowDel": "0",
					"orderNo": "1.1",
					"value": "3",
					"key": "3",
					"pid": "2",
					"isLeaf": false
				},
				{
					"id": "4",
					"pId": "2",
					"title": "短期",
					"children": [],
					"origin": null,
					"parentId": "2",
					"projectId": "1BD75301A441F0419098AEFA0129A9B4",
					"state": "0",
					"name": "短期",
					"financeType": null,
					"shareholderName": "魅力公司",
					"shareholderType": "0",
					"ownershipRatio": null,
					"expectedTotalAmount": 1000,
					"planTotalAmount": 900,
					"remark": "备注",
					"isAllowDel": "0",
					"orderNo": "1.2",
					"value": "4",
					"key": "4",
					"pid": "2",
					"isLeaf": false
				}
			],
			"origin": null,
			"parentId": null,
			"projectId": "1BD75301A441F0419098AEFA0129A9B4",
			"state": "0",
			"name": "金期",
			"financeType": null,
			"shareholderName": "魅力公司",
			"shareholderType": "0",
			"ownershipRatio": null,
			"expectedTotalAmount": 1000,
			"planTotalAmount": 900,
			"remark": "备注",
			"isAllowDel": "0",
			"orderNo": "1",
			"value": "1",
			"key": "1",
			"pid": null,
			"isLeaf": true,

		},
		{
			"id": "2",
			"pId": null,
			"title": "国金",
			"ywid": true,
			"children": [
				{
					"id": "3",
					"pId": "2",
					"title": "长期",
					"children": [],
					"origin": null,
					"parentId": "2",
					"projectId": "1BD75301A441F0419098AEFA0129A9B4",
					"state": "0",
					"name": "长期",
					"financeType": null,
					"shareholderName": "魅力公司",
					"shareholderType": "0",
					"ownershipRatio": null,
					"expectedTotalAmount": 1000,
					"planTotalAmount": 900,
					"remark": "备注",
					"isAllowDel": "0",
					"orderNo": "2.1",
					"value": "3",
					"key": "3",
					"pid": "2",
					"isLeaf": false
				},
				{
					"id": "4",
					"pId": "2",
					"title": "短期",
					"children": [],
					"origin": null,
					"parentId": "2",
					"projectId": "1BD75301A441F0419098AEFA0129A9B4",
					"state": "0",
					"name": "短期",
					"financeType": null,
					"shareholderName": "魅力公司",
					"shareholderType": "0",
					"ownershipRatio": null,
					"expectedTotalAmount": 1000,
					"planTotalAmount": 900,
					"remark": "备注",
					"isAllowDel": "0",
					"orderNo": "2.2",
					"value": "4",
					"key": "4",
					"pid": "2",
					"isLeaf": false
				}
			],
			"origin": null,
			"parentId": null,
			"projectId": "1BD75301A441F0419098AEFA0129A9B4",
			"state": "0",
			"name": "国金",
			"financeType": null,
			"shareholderName": "魅力公司",
			"shareholderType": "0",
			"ownershipRatio": null,
			"expectedTotalAmount": 1000,
			"planTotalAmount": 900,
			"remark": "备注",
			"isAllowDel": "0",
			"orderNo": "2",
			"value": "2",
			"key": "2",
			"pid": null,
			"isLeaf": false
		},
		{
			"id": "5",
			"pId": null,
			"title": "利用金",
			"ywid": true,
			"children": [
				{
					"id": "3",
					"pId": "2",
					"title": "长期",
					"children": [],
					"origin": null,
					"parentId": "2",
					"projectId": "1BD75301A441F0419098AEFA0129A9B4",
					"state": "0",
					"name": "长期",
					"financeType": null,
					"shareholderName": "魅力公司",
					"shareholderType": "0",
					"ownershipRatio": null,
					"expectedTotalAmount": 1000,
					"planTotalAmount": 900,
					"remark": "备注",
					"isAllowDel": "0",
					"orderNo": "2.1",
					"value": "3",
					"key": "3",
					"pid": "2",
					"isLeaf": false
				}
			],
			"origin": null,
			"parentId": null,
			"projectId": "1BD75301A441F0419098AEFA0129A9B4",
			"state": "0",
			"name": "利用金",
			"financeType": null,
			"shareholderName": "魅力公司",
			"shareholderType": "0",
			"ownershipRatio": null,
			"expectedTotalAmount": 1000,
			"planTotalAmount": 900,
			"remark": "备注",
			"isAllowDel": "0",
			"orderNo": "3",
			"value": "5",
			"key": "5",
			"pid": null,
			"isLeaf": true
		},
		{
			"id": "6",
			"pId": null,
			"title": "其他金",
			"ywid": true,
			"children": [],
			"origin": null,
			"parentId": null,
			"projectId": "1BD75301A441F0419098AEFA0129A9B4",
			"state": "0",
			"name": "其他金",
			"financeType": null,
			"shareholderName": "魅力公司",
			"shareholderType": "0",
			"ownershipRatio": null,
			"expectedTotalAmount": 1000,
			"planTotalAmount": 900,
			"remark": "备注",
			"isAllowDel": "0",
			"orderNo": "4",
			"value": "6",
			"key": "6",
			"pid": null,
			"isLeaf": true
		}
	]

二、代码如下

1.引入库

1.代码如下(数据扁平化1示例):

/**
 * 获取当前节点的所有父节点
 * @param list 
 * @param current 
 * @returns 
 */

const findParentId = (list, current) => {
    const res:string[] = [];
    function find(list, id) {
        list.forEach(item => {
            if (item.key === id) {
                res.unshift(id)
                if (item.parentId) {
                    find(list, item.parentId)
                }
            }
        });
    }
    find(list, current)
    return res
}

	/**
 * 数据扁平化
 * @param list 
 * @returns 
 */
	const flatTreeData = (list) => {
		const res: any = []
		function getData(list) {
			list.forEach(item => {
				res.push(item);
				if (item.children) {
					getData(item.children)
				}
			})
		}
		getData(list)
		return res
	}

	const a = flatTreeData(newData)
	console.log(a,"数据扁平化1")
/**
 * 将选中节点的父节点合并到选中节点中去
 * @param list 
 * @param selected 
 * @returns 
 */
const handleSelectedData = (list, selected)=>{
    const res:any[] = []
    const data= flatTreeData(list)
    selected.forEach(id=>{
        const items = findParentId(data,id)
       
        res.push(...items)
    })
    return Array.from(new Set(res))
}

2.代码如下(数据扁平化2示例):

	/**
 * 数据扁平化
 * @param source 
 * @returns 
 */
	const fn = (source)=>{
		let res:any = []
		source.forEach(el=>{
			res.push(el)
			el.children && res.push(...fn(el.children))
		})
		return res
	}
	console.log(fn(newData),"数据扁平化2")

3.代码如下(数据扁平化3示例):

	/**
 * 数据扁平化
 * @param arr 
 * @returns 
 */
//用栈实现(非递归)
	function flapvalue(arr) {
		let stack: any = []
		let newArr: any = []   // 扁平结构的数组
		for (let i = arr.length - 1; i >= 0; i--) {  // 倒序遍历数组,push到栈中
			stack.push(arr[i])
		}
		while (stack.length) {
			let item = stack.pop()
			newArr.push(item)
			if (item.children) {
				let children = item.children
				for (let i = children.length - 1; i >= 0; i--) {
					stack.push(children[i])
				}
			}
		}
		return newArr
	}
	console.log(flapvalue(newData),'数据扁平化3')

4.代码如下(数据扁平化4示例):文章来源地址https://www.toymoban.com/news/detail-515504.html

	/**
 * 数据扁平化
 * @param tree
 * @returns 
 */
	function treeToArray(tree) {
		var res:any = []
		for (const item of tree) {
		  const { children, ...i } = item
		  if (children && children.length) {
			res = res.concat(treeToArray(children))
		  }
		  res.push(i)
		}
		return res
	  }
	  console.log(treeToArray(newData),'数据扁平化4')

到了这里,关于js树形结构数组扁平化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 022:vue中tree结构数据变成扁平化table结构数据的示例

    第022个 查看专栏目录: VUE ------ element UI 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使用,computed,watch,生命周期(beforeCreate,created,beforeMount,mounted, beforeUpdate,upda

    2024年02月12日
    浏览(44)
  • 5个常见的前端手写功能:浅拷贝与深拷贝、函数柯里化、数组扁平化、数组去重、手写类型判断函数

    浅拷贝 浅拷贝是创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值,如果属性是引用类型,拷贝的就是内存地址,所以如果其中一个对象改变了这个地址,就会影响到另一个对象。 测试结果: 深拷贝 深拷贝是将

    2024年04月26日
    浏览(40)
  • 深度学习中Numpy的一些注意点(多维数组;数据类型转换、数组扁平化、np.where()、np.argmax()、图像拼接、生成同shape的图片)

    a.shape=(3,2);既数组h=3,w=2 a.shape=(2,3,2);这里第一个2表示axis=0维度上的,三维数组中3,2)数组的个数,这里表示两个(3,2)数组。 这里axis=0指代哪里是很重要的知识点。深度学习中经常压缩一个维度,axis=0。 numpy.squeeze()函数。 语法:numpy.squeeze(a,axis = None);作用是将shape维度为

    2024年01月18日
    浏览(49)
  • Golang每日一练(leetDay0118) 扁平化嵌套列表迭代器、整数拆分

    目录 341. 扁平化嵌套列表迭代器 Flatten Nested List Iterator  🌟🌟 343. 整数拆分 Integer Break  🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 给你一个嵌套的整数列表  nestedList  。每个元素要么是

    2024年02月16日
    浏览(46)
  • js处理扁平数组和树结构相互转换

    一、将扁平的数据转为树形结构 在 js中,可以使用递归算法将扁平的数据转换为树形结构。 扁平数据通常是一个带有 parentId 属性的数组,而树形结构通常是一个带有 children 属性的对象。 1、方法一 下面是一个简单的例子,演示如何将扁平数组转换为树形对象: 2、方法二

    2024年02月12日
    浏览(44)
  • js递归遍历树形结构数据,获取所有数组id集合

    实现思路 可以使用递归遍历整个树形数组,将每个节点的id加入到一个数组中,最后返回这个数组即可。 数据准备 代码实现 方式一 获取结果 方式二 获取结果 方式三 获取结果 方法总结 这里的tree是树形数组,result是用来保存所有id的数组。 首先遍历当前层级的每个节点,

    2024年02月11日
    浏览(52)
  • "树形List"与"扁平List"互转(Java实现)

    背景: 在平时的开发中,我们时常会遇到下列场景 公司的 组织架构 的数据存储与展示 文件夹 层级 的数据存储与展示 评论系统中, 父评论与诸多子评论 的数据存储与展示 ...... 对于这种有层级的结构化数据,就像是一棵 树 一样。在关系型数据库中,通常将一个个的节点

    2024年02月03日
    浏览(31)
  • js递归操作树形结构

    数据结构 转成扁平化 运行结果 扁平结构转成树形结构 数据结构 转成树形结构 运行结果 数据结构 根据parentId查找父节点 运行结果(会把自己及父节点保存下来) 需求:根据点击子节点查询没有就一直向上查 思路:拿到树形结构数组直接递归查询 难点:         1)获取

    2024年02月04日
    浏览(46)
  • 微信小程序多列下拉框的实现(树形数据结构和单数组数据结构形式)

    利用微信小程序api,实现不同传输数据格式下的多列下拉框实现 首先了解一下picker中的事件 这里是官方文档,具体意思就是 当你滑动多列中的某一列的时候, bindcolumnchange 事件就会触发。当选择完毕点击确定的时候 bindchange 事件就会触发 微信小程序的多列下拉框是真的反人

    2024年02月07日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包