对js对象、数组扁平化的理解

数组、对象扁平化主要运用的有两个知识点,一个是数据类型的判断,另一个则是递归的运用。
instanceof:判断数据类型
obj instanceof Object //判断对象
arr.instanceof Array //判断数组

先来一段网上copy下来的代码

		let obj = {
			a:5,
			b:{c:2,d:['ac',{d:5},9]},
			ce:{qa:561,ceq:'ceq',bing:['ce','ceq',{ceae:'cq'}]},
			f:56,
			g:['cea','ceg'],
			z:null,
			qc:'ceq'
		}


		function fl(obj){
			const ans = {};
			inner(obj,null);

			function inner(o,prev){
				for(let key in o){
					if(o[key] instanceof Object){
						if(prev === null){
							inner(o[key],key);
						}else{
							inner(o[key],prev + '.' + key);
						}
					}else{
						if(prev === null){
							ans[key] = o[key]
						}else{
							ans[prev + '.' + key] = o[key];
						}
					}
				}
			}
			return ans;
		}

在这里插入图片描述
instanceof 的做用就是判断当前是否是对象。
而在此中,首先是判断每一个小对象中的值是否也是对象。所以在这儿用的是instanceof。如果说小对象中不再有对象(也就是最后一层了)那么就它就直接输出。
而如果在小对象里面还有对象,那它就来一次递归,再次用链值对的方法。


如果是数组,也是类似。

let arr = [5,6,3,[23,54,45,[56,45465,['ce','fec']]],['CE',{ceg:'cefg'}]];
function arrFormat(arr){
	var res = [];
	arr.forEach((item,index,arr)=>{
		if(item instanceof Array){
			//res = res.concat(arrFormat(item));
			//或者也可以这样写(说白了就是合并数组)
			let f = arrFormat(item)
			res = [...res,...f]
		}else{
			res.push(item)
		}
	})
	return res;
}

let a = arrFormat(arr);
console.log(a);

在这里插入图片描述
对于数组的扁平化,我们也可以用ES6它内置的函数来处理。

//flat(Infinity) 也可以来处理数组的扁平化
	let arr = [
		2,3,5,
		['a','c',[6,9,0,['q','w','e']]]
	]
	let r = arr.flat(Infinity);
	console.log(r)

总结起来,不管是对象扁平化还是数组的扁平化,都是以大对象/数组拿来做遍历,遍历它里面的小元素。直到它的最后一级。
注:代码来原于网上的搞抄,而讲解只是自己的理解所写下来的。代码部份还请原作者见谅

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值