简体   繁体   中英

Extjs/js multidemensional array convert to string

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM