所以我有我的初始数据,我想根据key转换成多维对象,

var Data = {
    "1": "Hi 1",
    "1.1": "Hi 1.1",
    "1.1.1": "Hi 1.1.1",
    "2": "Hi 2",
    "2.1": "Hi 2.1",
    "2.2": "Hi 2.2",
    "3": "Hi 3",
}

1等于1.1

1.1等于1.1.1

2等于2.12.2

例如,我的预期结果:

NewData = {
    "1": {
        "Text": "Hi 1",
        "1": {
            "Text": "Hi 1.1",
            "1": {
                "Text": "Hi 1.1.1",
            },
        }, 
    },
    "2": {
        "Text": "Hi 2",
        "1": {
            "Text": "Hi 2.1",
        },
        "2": {
            "Text": "Hi 2.2",
        },
    },
    "3": {
        "Text": "Hi 3",
    },
}

我try 了以下几点:

var NewData = {};
$.each(Data, function(key, value) {
    var splitted = key.split(".");

    $.each(splitted , function(key2, value2) {

        // Stuck here
        // How to make multidimensional object in Javascript dynamically.

    });
});

推荐答案

您可以减少指向嵌套对象的路径,并指定Text个属性.

const
    data = { "1": "Hi 1", "1.1": "Hi 1.1", "1.1.1": "Hi 1.1.1", "2": "Hi 2", "2.1": "Hi 2.1", "2.2": "Hi 2.2", "3": "Hi 3" },
    tree = Object
        .entries(data)
        .reduce((r, [path, text]) => {
            path
                .split('.')
                .reduce((o, k) => o[k] ??= {}, r)
                .Text = text;
                
            return r;
        }, {});

console.log(tree);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Javascript相关问答推荐

使用下表中所示的值初始化一个二维数组

通过嵌套模型对象进行Mongoose搜索

React 17与React 18中的不同setState行为

如何从一个列表中创建一个2列的表?

为什么我的导航条打开状态没有在窗口addeventlistener(Reaction Js)中更新?

使用getBorbingClientRect()更改绝对元素位置

扩展类型的联合被解析为基类型

自定义图表工具提示以仅显示Y值

更改agGRID/Reaction中的单元格格式

是否可以在不更改组件标识的情况下换出Reaction组件定义(以维护状态/引用等)?如果是这样的话,是如何做到的呢?

Clip-Path在网页浏览器(Mozilla、Edge、Chrome)上不能正常工作,但在预览版Visual Code Studio HTML、CSS、JS上却能很好地工作

TypeORM QueryBuilder限制联接到一条记录

如何将对象推送到firestore数组?

使用Java脚本筛选数组中最接近值最小的所有项

如果未定义,如何添加全局变量

与find()方法一起使用时,Mongoose中的$or运算符没有提供所有必需的数据

在不使用AJAX的情况下将JavaScript数组值传递给Laravel控制器?

如何从图表中映射一组图表-js使用REACT

Html/JS:如何在脚本执行前阻止呈现?

2.0.0-dev quill拖动文本不起作用如何使其拖动文本