我很难从多维数组构造特定的字符串。
这是我的阵列:
[[{query:'number:1', operand:''},
[{query:'number:2', operand:'&&'},{query:'number:3', operand:'&&'}]],
[{query:'number:4', operand:'||'},{query:'number:5', operand:'||'}]]
如何从这个数组构造一个字符串,如下所示:
((number:1&&(number:2&&number:3))||(number:4||number:5))
我创建了一个递归函数,但结果并没有像我预期的那样返回。
这是我的代码:
function queryRecursive(queArr){
var que='';
Ext.each(queArr, function(q,idx){
if(Ext.typeOf(q)==='array'){
que+=me.queryRecursive(q);
}else{
if(idx===0){
if(q.operand===''){
que +=q.operand+q.query;
}else{
que +=q.operand+'('+q.query;
}
}else if(idx===queArr.length-1){
que +=q.operand+q.query+')';
}else{
que +=q.operand+q.query;
}
}
});
return que;
}
这是返回结果:
number:1&&(number:2&&number:3)||(number:4||number:5)
答案 0 :(得分:0)
以下函数生成预期输出。
我添加了一个secound参数addInnerBracket
,它指示添加左括号的位置。
function queryRecursive(queArr, addInnerBracket) {
var que = addInnerBracket ? '' : '(';
Ext.each(queArr, function (q, idx) {
if (Ext.isArray(q)) {
que += queryRecursive(q, true);
}
else {
var innerBracket = addInnerBracket ? '(' : '';
addInnerBracket = false; // only add one inner bracket
que += q.operand + innerBracket + q.query;
}
});
return que + ')';
}