Extjs / js multidemensional数组转换为字符串

时间:2016-11-01 11:33:51

标签: javascript extjs

我很难从多维数组构造特定的字符串。

这是我的阵列:
[[{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)

1 个答案:

答案 0 :(得分:0)

以下函数生成预期输出。 我添加了一个secound参数addInnerBracket,它指示添加左括号的位置。

检查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 + ')';
}