首页 > 其他分享 >a.b.c.d 转 a:{b:{c:123}} 支持对象 数组

a.b.c.d 转 a:{b:{c:123}} 支持对象 数组

时间:2023-03-09 15:33:49浏览次数:29  
标签:arr obj name 对象 value t1 123 let 数组

方法中用到 lodash.js 的一个 merge合并对象方法

let arr = [
    {
        name:'a[0].b.c',
        value:123
    },{
        name:'a[0].b.a',
        value:123
    },{
        name:'a[1].a.a',
        value:456
    },{
        name:'c.d.a',
        value:789
    },{
        name:'b.c.c[0]',
        value:789
    },{
        name:'b.a[1].c',
        value:789
    },{
        name:'b.a[1].d',
        value:456
    },{
        name:'b.a[0].c',
        value:789
    }
]
let obj = {}
arr.forEach(e=>{
    let a = `${e.name}`.split('.');
    let b = a[0].includes('[')?[]:{};
    if(a[0].includes('[')){
        let t = a[0].match(/\[(\S*)]/)[1];
        let t1 = a[0].match(/(\S*)\[/)[1];
        if(!obj.hasOwnProperty(t1)) obj[t1] = [];
        if(!obj[t1][t]){
            obj[t1][t] = getObj(a,b,e)
        }else{
            obj[t1][t] = _.merge(obj[t1][t],getObj(a,b,e))    
        }
    }else{
        if(!obj.hasOwnProperty(a[0])){
            obj[a[0]] = getObj(a,b,e)
        }else{
            obj[a[0]] = _.merge(obj[a[0]],getObj(a,b,e))
        }
    }
});
function getObj(arr,type,e){
    return arr.reduceRight((p,c,i)=>{
        if(!i) return p
        if(c.includes('[')){
            let t = c.match(/\[(\S*)]/)[1];
            let t1 = c.match(/(\S*)\[/)[1];
            let ta = Array(t+1).fill()
            ta[t] = ((arr.length - 1)==i)? e.value:p
            return {[t1]:ta}
        }else{
            
            if((arr.length - 1)==i) return {[c]:e.value}
            return {[c]:p}
        }
    },type);
}
console.log(obj)

标签:arr,obj,name,对象,value,t1,123,let,数组
From: https://www.cnblogs.com/zgfs/p/17198601.html

相关文章

  • 华为OD机试 数组合并
    数组合并......
  • vba 数组
    数组是具有相同数据类型并共同享有一个名字的一组变量的集合.数组中的元素通过索引数字加以区分,定义数组的方法如下:​Dimarray_name(n)Astype​(其中n是数组元素的......
  • JavaScript 对象管家 Proxy
    JavaScript在ES6中,引入了一个新的对象类型​​Proxy​​​,它可以用来代理另一个对象,并可以在代理过程中拦截、覆盖和定制对象的操作。​​Proxy​​对象封装另一个对象......
  • 数组 方法:push pop 自己实现
    大概需要了解的知识点就是1.函数原型对象2.函数内this指向3.函数形参的概念简易实现,很好理解(push)      (pop) ......
  • ES6-ES11 ES8对象方法扩展
    视频<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>E......
  • TypeScript学习笔记 -- 接口对象
    1.接口对象-对对象的形状(shape)进行描述2.基本用法:规定了对象属性的类型  接口的首字母大写,一般会在接口前面加上大写的I  定义好的接口使用的时候,其中的属性不......
  • Object 对象
    概述JavaScript原生提供Object对象JavaScript的所有其他对象都继承自Object对象,即那些对象都是Object的实例Object对象的原生方法分成两类:Object本身的方法与......
  • 03、数据采集对象与数据类型
    转载公众号《微言晓意》,仅用于个人学习安全告警、系统与应用日志、网络流量以及资产漏洞、威胁情报等数据中,都包含大量有价值的安全信息,对这些分离的多源异构数据进行统一......
  • 1310. 子数组异或查询 (Medium)
    问题描述1310.子数组异或查询(Medium)有一个正整数数组arr,现给你一个对应的查询数组queries,其中queries[i]=[Lᵢ,Rᵢ]。对于每个查询i,请你计算从Lᵢ到Rᵢ......
  • python入门学习-2.特性、函数、面向对象编程、文件读写
    高级特性切片取一个list或tuple的部分元素>>>L=['Michael','Sarah','Tracy','Bob','Jack']笨方法:>>>[L[0],L[1],L[2]]['Michael','Sarah','Tracy']切......