我需要使用各种分层树数据创建一个平面array.我将以字符串的形式获取树 node 数组,其形式为parentNode-Child Node-...这一切都是动态的.我试图将treeNodeInput转换为嵌套对象,但无法利用它.

const TREE_DATA = [{
    name: 'USA',
    children: [{
        name: 'Texas',
        children: [{
            name: 'Dallas'
        }, {
            name: 'Houston'
        }]
    }, {
        name: 'California',
        children: [{
            name: 'Los Angeles'
        }, {
            name: 'San Francisco'
        }]
    }, {
        name: 'New York',
        children: [{
            name: 'New York City'
        }, {
            name: 'Buffalo'
        }]
    }],
}, {
    name: 'India',
    children: [{
        name: 'Bihar',
        children: [{
            name: 'Patna'
        }, {
            name: 'Gaya'
        }],
    }],
}, ];

let treeDataGroupedBy = ['Country', 'State', 'City'];
let treeNodeInput = ['0-0-0', '1-0-1'];
let data = []; /*Expected Result [{
    Country: 'USA',
    State: 'Texas',
    City: 'Dallas'
}, {
    Country: 'India',
    State: 'Bihar',
    City: 'Gaya'
}]*/

for (let item of treeNodeInput) {
    let nodesArray = item.split("-");
    let count = 0;
    let rowObj = {};
    for (let node of nodesArray) {
        rowObj[treeDataGroupedBy[count]] = Object.keys(TREE_DATA)[Number(node)];
                count++;
    }
    data.push(rowObj);
}

console.log(data)

推荐答案

您可以通过执行这一最小的代码更改来获得预期的结果.

const TREE_DATA = [{
    name: 'USA',
    children: [{
        name: 'Texas',
        children: [{
            name: 'Dallas'
        }, {
            name: 'Houston'
        }]
    }, {
        name: 'California',
        children: [{
            name: 'Los Angeles'
        }, {
            name: 'San Francisco'
        }]
    }, {
        name: 'New York',
        children: [{
            name: 'New York City'
        }, {
            name: 'Buffalo'
        }]
    }],
}, {
    name: 'India',
    children: [{
        name: 'Bihar',
        children: [{
            name: 'Patna'
        }, {
            name: 'Gaya'
        }],
    }],
}, ];

let treeDataGroupedBy = ['Country', 'State', 'City'];
let treeNodeInput = ['0-0-0', '1-0-1'];
let data = []; /*Expected Result [{
    Country: 'USA',
    State: 'Texas',
    City: 'Dallas'
}, {
    Country: 'India',
    State: 'Bihar',
    City: 'Gaya'
}]*/

for (let item of treeNodeInput) {
    let nodesArray = item.split("-");
    let count = 0;
    let rowObj = {};
    let child = TREE_DATA
    for (let node of nodesArray) {
            if(child.hasOwnProperty('children')){
                child =child["children"][node]
            }
            else{
                child =child[node]
            }
                rowObj[treeDataGroupedBy[count]] = child.name;
                count++;
      
    }
    data.push(rowObj);
}

console.log(data)

Javascript相关问答推荐

在JavaScript中打开和关闭弹出窗口

获取表格的左滚动位置

如何解决这个未能在响应上执行json:body stream已读问题?

使用TMS Web Core中的HTML模板中的参数调用过程

Cypress -使用commands.js将数据测试id串在一起失败,但在将它们串在一起时不使用命令有效

Chart.js V4切换图表中的每个条,同时每个条下有不同的标签.怎么做?

如何在mongoose中链接两个模型?

当试图显示小部件时,使用者会出现JavaScript错误.

更改JSON中使用AJAX返回的图像的路径

如何从调整大小/zoom 的SVG路径定义新的d属性?""

获取Uint8ClampedArray中像素数组的宽度/高度

加载背景图像时同步旋转不显示的问题

Prisma具有至少一个值的多对多关系

如何强制Sphinx中的自定义js/css文件始终加载更改而不缓存?

提交链接到AJAX数据结果的表单

基于props 类型的不同props ,根据来自接口的值扩展类型

MarkLogic-earch.suggest不返回任何值

判断函数参数的类型

JQuery使用选项填充HTMLSELECT并设置默认结果,默认结果显示为空

如何用react组件替换dom元素?