需要在javascript中创建嵌套对象,链接3个用户输入数组以创建树状图案

时间:2017-02-04 10:32:33

标签: javascript jquery html

如果有3个阵列,

var a=[1,2,3];
var b=[1.1,1.2,'',2.1,2.2,2.3,'',3.1,3.2,3.3];
var c=['xyz','abc',' ','uvw',' ','opq','rst','cde',' ','hij',' ','stu','wxy','nop',' ','def',' ','fgh'];

元素应该链接到{key:1, val:{key:1.1,val:['xyz','abc']},{key:1, val:{key:1.2,val:['uvw']}。 数组b和c中的元素由空char“”和空格“”分隔。我需要一种方法来创建树状图案的嵌套关联数组。 我以下列方式链接了2个数组。我现在需要3个阵列。

<p id="ext">Extended: </p>

<script type="text/javascript">
    var a=[1,2,3,4];
    var b = [1.1,1.2,1.3,'',2.1,2.2,'',3.1,3.2,3.3,'',4.1,'',5.1,5.2,'',6.1,6.2,''];
    //var arr = [];
    var obj = {};
    $('#ini').append(JSON.stringify(obj));
    //var i = 0, j = 0
    var j = 0; var bArr= [];
    var soln = {};
    for(i=0;i<b.length;i++){
        if(b[i]==''){                
            bArr=[];
            $('#ext').append(JSON.stringify(obj));
            if(j==a.length){
                var elem = 'undefined';
                $.extend(obj,{key: elem, val:bArr});
            }
            ++j;
            continue;
        }
        else{
            console.log(i);
            //console.log(j);
            var elem = a[j];
            bArr.push(b[i]);
            $.extend(obj,{key: elem, val:bArr});
            //j++;
        }
        //soln.key = elem;
        //soln.val = bArr;
    }
    //$('#ext').append(JSON.stringify(obj));
</script>

1 个答案:

答案 0 :(得分:0)

您可以使用Array#map并返回其他项的组合对象,并为每个嵌套数组提供索引并循环,直到找到停止标记,然后推送到内部数组。在循环之后递增最后一个索引以及下一个项目。

&#13;
&#13;
var data1 = [1, 2, 3],
    data2 = [1.1, 1.2, '', 2.1, 2.2, 2.3, '', 3.1, 3.2, 3.3],
    data3 = ['xyz', 'abc', ' ', 'uvw', ' ', 'opq', 'rst', 'cde', ' ', 'hij', ' ', 'stu', 'wxy', 'nop', ' ', 'def', ' ', 'fgh'],
    index2 = 0,
    index3 = 0,
    result = data1.map(function (a) {
        var o1 = { key: a, val: [] }, o2, o3;
        while (index2 < data2.length && data2[index2] !== '') {
            o2 = { key: data2[index2], val: [] };
            while (index3 < data3.length && data3[index3] !== ' ') {
                o2.val.push(data3[index3]);
                index3++;
            }
            index3++;
            o1.val.push(o2);
            index2++;
        }
        index2++;
        return o1;
    });

document.getElementById('out').innerHTML = JSON.stringify(result, 0, 4);
&#13;
<pre id="out"></pre>
&#13;
&#13;
&#13;