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))代码>