如果有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>
答案 0 :(得分:0)
您可以使用Array#map
并返回其他项的组合对象,并为每个嵌套数组提供索引并循环,直到找到停止标记,然后推送到内部数组。在循环之后递增最后一个索引以及下一个项目。
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;