我有一个多维数组,如下所示(列),并需要将其转换为形成分组层次结构的对象数组,以构建表头。
每个值必须按照索引的顺序进行嵌套,并进行分组。有什么建议可以实现这一点吗?
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'
}
]
}]
}]
}]发布于 2021-01-19 02:58:07
您可以使用嵌套的reduce()调用来构建每个对象的结构,保留每个数组的最后一个元素以推入由内部reduce()返回的最内层的columns数组
var input = [["Price", "Australia", "Melbourne", "Comfort Hotel & Spa"], ["Price", "Costa Rica", "Tamarindo", "Summer Isle Hotel"], ["Stars", "Fiji", "Suva", "Crescent Resort1"], ["Stars", "Fiji", "Suva", "Crescent Resort2"],];
const output = input.reduce((a, arr) => {
const
leafValue = arr.join('-'),
leafHeader = arr.pop();
const inner = arr.reduce((b, e) => (
b.push({ Header: e, columns: [] }), b[b.length - 1].columns), a)
inner.push({ Header: leafHeader, value: leafValue });
return a;
}, [])
console.log(JSON.stringify(output, null, 2));
https://stackoverflow.com/questions/65779921
复制相似问题