Javascript 将多维数组转换为对象的分组数组

Javascript 将多维数组转换为对象的分组数组,javascript,arrays,json,multidimensional-array,nested-loops,Javascript,Arrays,Json,Multidimensional Array,Nested Loops,我有一个多维数组,如下所示(列),需要将其转换为形成分组层次结构的对象数组,以构造一个表头 每个值都必须按索引顺序嵌套并分组。如何实现这一目标,有什么建议吗 var columns = [ ["Price", "Australia", "Melbourne", "Comfort Hotel & Spa"], ["Price", "Costa Ric

我有一个多维数组,如下所示(列),需要将其转换为形成分组层次结构的对象数组,以构造一个表头

每个值都必须按索引顺序嵌套并分组。如何实现这一目标,有什么建议吗

var columns = [
        ["Price", "Australia", "Melbourne", "Comfort Hotel & Spa"],
        ["Price", "Costa Rica", "Tamarindo", "Summer Isle Hotel"],
        ["Stars", "Fiji", "Suva", "Crescent Resort1"],
        ["Stars", "Fiji", "Suva", "Crescent Resort2"],
    ];

//need it to be transformed into structure like this
var transformedArray = [{
    Header: 'Price',
    columns: [{
        Header: 'Australia',
        columns: [{
            Header: 'Melbourne',
            columns: [{
                Header: 'Comfort Hotel & Spa',
                value: 'Price-Australia-Melbourne-Comfort Hotel & Spa'
            }]
        }]
    }, {
        Header: 'Costa Rica',
        columns: [{
            Header: 'Tamarindo',
            columns: [{
                Header: 'Summer Isle Hotel',
                value: 'Price-Costa Rica-Tamarindo-Summer Isle Hotel'
            }]
        }]
    }]
}, {
    Header: 'Stars',
    columns: [{
        Header: 'Fiji',
        columns: [{
            Header: 'Suva',
            columns: [{
                    Header: 'Crescent Resort1',
                    value: 'Stars-Fiji-suva-Crescent Resort1'
                },
                {
                    Header: 'Crescent Resort2',
                    value: 'Stars-Fiji-suva-Crescent Resort2'
                }
            ]
        }]
    }]
}]

您可以使用嵌套的
reduce()
调用来构建每个对象的结构,保留每个数组的最后一个元素以推入内部
reduce()返回的最内层
数组

var输入=[“价格”、“澳大利亚”、“墨尔本”、“舒适酒店及水疗中心”]、[“价格”、“哥斯达黎加”、“塔马里多”、“夏季岛酒店”]、[“星级”、“斐济”、“苏瓦”、“新月度假村1”]、[“星级”、“斐济”、“苏瓦”、“新月度假村2”]、];
常量输出=输入。减少((a,arr)=>{
常数
leafValue=arr.join('-'),
leafHeader=arr.pop();
内部常数=arr.reduce((b,e)=>(
b、 push({Header:e,columns:[]}),b[b.length-1].columns),a)
push({Header:leaftheader,value:leaftvalue});
返回a;
}, [])
log(JSON.stringify(output,null,2))