首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将多维数组转换为对象的分组数组

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

Stack Overflow用户
提问于 2021-01-19 02:13:29
回答 1查看 28关注 0票数 0

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

每个值必须按照索引的顺序进行嵌套,并进行分组。有什么建议可以实现这一点吗?

代码语言:javascript
复制
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'
                }
            ]
        }]
    }]
}]
EN

回答 1

Stack Overflow用户

发布于 2021-01-19 02:58:07

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

代码语言:javascript
复制
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));

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65779921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档