Javascript 循环通过无限嵌套对象&;构造字符串
我正在我的一个项目中使用,以便用户可以构造查询 我很难将其解析为实际的示例查询,例如组件输出的这个对象:Javascript 循环通过无限嵌套对象&;构造字符串,javascript,loops,object,recursion,Javascript,Loops,Object,Recursion,我正在我的一个项目中使用,以便用户可以构造查询 我很难将其解析为实际的示例查询,例如组件输出的这个对象: const queryParams = { "rules": [ { "rules": [ { "field": "firstName", "value": "John", "operator": "=" }, { "field": "las
const queryParams = {
"rules": [
{
"rules": [
{
"field": "firstName",
"value": "John",
"operator": "="
},
{
"field": "lastName",
"value": "Doe",
"operator": "="
}
],
"combinator": "and"
},
{
"rules": [
{
"field": "age",
"value": "20",
"operator": "="
},
{
"field": "address",
"value": "London",
"operator": "="
}
],
"combinator": "and"
}
],
"combinator": "and"
}
我需要创建一个函数,该函数将输出更用户友好的可读输出,例如:
((FirstName = John AND LastName = Doe) AND (AGE = 20 AND Address = London))
我已经试过了,但我发现困难在于:
- 理论上,这个对象可以无限嵌套,我从来不知道它是如何嵌套的。递归是实现这一点的唯一方法吗?还是有更简单的方法
- 规则和组可以位于同一对象中
多亏了您可以采用递归方法构建规则集或最终比较 它通过检查
规则
属性来工作:
- 如果给定,
将通过递归调用函数进行映射 此调用的结果与一个大写的规则
属性连接在一起,并包装成一个带括号的空格字符串combinator
- 如果没有,则使用
、字段
和运算符
属性获取一个新字符串值
函数组合(对象){
返回对象中的“规则”
?`(${object.rules.map(combine.join)(`${object.combinator.toUpperCase()}`)})`
:`${object.field}${object.operator}${object.value}`;
}
var数据={rules:[{field:“firstName”,value:“John”,operator:“},{field:“lastName”,value:“Doe”,operator:“=”}],combinator:“and”},{rules:[{field:“age”,value:“20”,operator:“=”},{field address:“value:“London”,operator:“}],combinator:“and”},
结果=合并(数据);
控制台日志(结果)代码>你们能分享一下你们目前是怎么做的吗?“对象理论上可以无限嵌套”-使用for循环应该可以解决这个问题,你们尝试过递归吗?共享您的代码如果您决定这样做,您可以始终使用循环和堆栈(LIFO)结构来模拟递归。这个(非JS)解释非常简单:。。。(虽然如果你想了解那些古怪的递归,这似乎是一个很棒的JS教程:)这是一个非常好的方法,但最好有一个解释这实际上是一个转储组件,它缺少字段类型:),因此我们可以确定字段是否为string,intetc@Alen.Toma,我认为这只是以一种简化的方式向用户展示正在发生的事情。正确@NinaScholz-感谢您提供的解决方案,这很好