I'm having a difficulty to construct a specific string from multidimensional array.
This is my array:
[[{query:'number:1', operand:''}, [{query:'number:2', operand:'&&'},{query:'number:3', operand:'&&'}]], [{query:'number:4', operand:'||'},{query:'number:5', operand:'||'}]]
How do I construct a string from this array to become like this:
((number:1&&(number:2&&number:3))||(number:4||number:5))
I've create a recursive function however the result does not return as I expected.
Here is my code:
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;
}
Here is the return result:
number:1&&(number:2&&number:3)||(number:4||number:5)
The following function generates the expected output. I added a secound parameter addInnerBracket
, which indicates where to add the opening bracket.
Check the working Sencha Fiddle .
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 + ')';
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.