数组转化为有序对象

阿里 字节 腾讯笔面试题:

[
    ["a", "aa", "aaa", "aaaa"],
    ["b", "bb", "bbb"],
    ["a", "ab", "aba"],
    ["a", "aa", "aab"]
] 

转化为

[
    {
        "name" : "a",
        "child" : [
            {
                "name" : "aa",
                "child" : [
                    {
                        "name" : "aaa",
                        "child" : [
                            {
                                "name" : "aaaa",
                                "child" : []
                            }
                        ]
                    },
                    {
                        "name" : "aab",
                        "child" : []
                    }
                ]
 
            },
            {
                "name" : "ab",
                "child" : [
                    {
                        "name": "aba",
                        "child" : []
                    }
                ] 
            }
        ]
    },
    {
        "name": "b",
        "child" : [
            {
                "name" : "bb",
                "child" : [
                    {
                        "name" : "bbb",
                        "child" : []
                    }
                ]
            }
        ]
    }
]

代码:


function fn(arr){
  	if( arr.length == 0 ){
  		return [];
  	}
  	let items = [...new Set(arr.map( p=>p[0] ))];
//p原本是arr[0]/arr[1]/arr[2]/arr[3] p[0]是指arr[0][0]/arr[1][0]/arr[2][0]/arr[3][0]即a,b,a,a赋值给p  
//经过...new Set()去重排序后为a,b   items = ["a","b"]	
items = items.map( name=>{
	let child = arr.filter( p=>p[0]==name ).map( r=>r.slice(1) );
//arr.filter( p=>p[0]==name )是指[["a", "aa", "aaa", "aaaa"],["a", "ab", "aba"],["a", "aa", "aab"]],[["b", "bb", "bbb"]]]
//arr.filter( p=>p[0]==name ).map( r=>r.slice(1) )是指[["aa","aaa","aaaa"],["ab","aba"],["aa","aab"]],[["bb","bbb"]]]"	
	if( child && child[0].length ){
		return{
			name,
			child:fn(child)//递归执行
		}
	}else{
		return{
			name,
			child:[]
		}
	}
} )
  	return items;
  }
let data =[["a", "aa", "aaa", "aaaa"],["b", "bb", "bbb"],["a", "ab", "aba"],["a", "aa", "aab"]];
let res = fn( data );
console.log( JSON.stringify( res,null,2 ) )
//JSON.stringify()第一个参数为obj或者数组  第二个参数为用于转换结果的函数或数组  第三个参数为返回值文本在每个级别缩进指定数目的空格

主要用到 …newSet() / arr.map / arr.filter / arr.slice() / JSON.stringify()
重视js基础

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值