首页 > 解决方案 > 从简单数组创建嵌套对象

问题描述

我正在尝试从一个简单的数组中创建一个深层嵌套的 JS 对象。棘手的部分是数组中的下一项应始终添加到前一项。

假设我的数组如下所示:

const filters = [
    [
        {brand: {eq: 'BMW'}},
        {brand: {eq: 'AUDI'}}
    ],
    [
        {year: {eq: '2019'}},
        {year: {eq: '2020'}}
    ],
    [
        {country: {eq: 'CH'}},
        {country: {eq: 'DE'}}
    ]
]

如何获得具有该结构的对象?

    query: {
      and: {
        or: [
          { brand: { eq: 'BMW' } },
          { brand: { eq: 'AUDI' } }
        ],
        and: {
          or: [
            { year: { eq: '2019' } },
            { year: { eq: '2020' } }
          ],
          and: {
            or: [
              { country: { eq: 'CH' } },
              { country: { eq: 'DE' } }
            ],
            ... and so on
          }
        }
      }
    },

如何将新的“或”块添加到前一个“或”块?

标签: javascriptarrays

解决方案


您可以在遍历数组时构建嵌套结构。对于每个项目,添加一个嵌套对象,其中包含一个or链接到该项目的键,并且每次后续迭代都对前一个项目进行处理

const filters = [
    [
        {brand: {eq: 'BMW'}},
        {brand: {eq: 'AUDI'}}
    ],
    [
        {year: {eq: '2019'}},
        {year: {eq: '2020'}}
    ],
    [
        {country: {eq: 'CH'}},
        {country: {eq: 'DE'}}
    ]
]

const query = {};
let current = query;

for (const filter of filters) {
  current.and = { or: filter };
  current = current.and; 
}

console.log(query);


推荐阅读