javascript - 从简单数组创建嵌套对象
问题描述
我正在尝试从一个简单的数组中创建一个深层嵌套的 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
}
}
}
},
如何将新的“或”块添加到前一个“或”块?
解决方案
您可以在遍历数组时构建嵌套结构。对于每个项目,添加一个嵌套对象,其中包含一个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);
推荐阅读
- api - Flutter 中的 API 调用(飞镖)
- python - 我应该怎么做才能让我的照片出现在 Django only safari 中?
- swift - 斯威夫特:我怎样才能在完成体内调用我的函数?
- android - 在flutter中编写kotlin代码的configureFlutterEngine方法中的问题
- python - 如何在使用 Selenium 和 Python 调用函数之前等待特定 URL 加载
- java - Java 得到很好的 toString 对象引用某些数组类型
- c# - 如何从另一个函数访问我的索引?
- java - java如何验证证书
- java - quarkus runtimeException“操作数堆栈上的错误类型”
- javascript - 将 useState 从一个组件导出到另一个组件