为html javascript数组中的每个值创建新行

为html javascript数组中的每个值创建新行,javascript,html,Javascript,Html,我有这个阵列: var output = [[[a], [a1, a3, a5]], [[b], [b1, b2, b3]]] 我希望使用javascript在html中创建一个如下所示的表: a | b ------- a1 | b1 a3 | b2 a5 | b3 但目前我只能这样理解: a | b -------------------- a1,a3,a5 | b1,b2,b3 使用此代码 var table = '<table ' + TABLEF

我有这个阵列:

var output = [[[a], [a1, a3, a5]], [[b], [b1, b2, b3]]]
我希望使用javascript在html中创建一个如下所示的表:

a  |  b
-------
a1 | b1
a3 | b2
a5 | b3
但目前我只能这样理解:

   a     |    b
--------------------
a1,a3,a5 | b1,b2,b3
使用此代码

  var table = '<table ' + TABLEFORMAT + ' ">';

  for (var row = 0; row < output.length; row++) {

    table += '<tr>';

    for (var col = 0; col < output[row].length; col++) {
      if (output[row][col] === "" || 0) {
        table += '<td>' + '' + '</td>';
      } else
        if (row === 0) {
          table += '<th>' + output[col][row] + '</th>';
        } else {
         table += '<td>' + output[col][row] + '</td>';
        }
    }
    table += '</tr>';
  }

var table='如果您对forEach不满意,可以将forEach替换为for..loop

var表=”;
变量输出=[
[
[“a”],
[“a1”、“a3”、“a5”]
],
[
[“b”],
[“b1”、“b2”、“b3”]
]
]
输出[0]。forEach((arr,i,src)=>{
const nextArr=输出[1];
如果(i==0){
表+=``
表+=`${arr[i]}${nextArr[i]}`
表+=``
}否则{
arr.forEach((el、索引、嵌套SRC)=>{
表+=``
表+=`${el}${nextArr[i][index]}`
表+=``
})
}
})
表+=``;

document.querySelector(“body”).innerHTML=表格需要循环并显示在单独表中的第二级数组

功能测试(){
var输出=[['a']、['a1'、[a3'、[a5']、[[b']、[b1'、[b2'、[b3']];
var表=“”;
对于(变量行=0;行对于(i=0;i,您可以将数据转换为类似于表的结构,然后创建表

const
pad=(array,tag)=>array.map(v=>`${v}`)。join(“”),
原始=[['a']、['a1'、[a3'、[a5']、[[b']、[b1'、[b2'、[b3']],
数据=原始还原((r,[[h],a])=>{
r、 割台推压(h);
a、 forEach((v,i)=>(r.body[i]=r.body[i]| |[])。push(v));
返回r;
},{header:[],body:[]}),
table=document.createElement('table');
table.innerHTML=`
${pad(data.header,'th')}
${pad(data.body.map(a=>pad(a,'td'),'tr'))
`;

document.body.appendChild(table);
HTML表格是面向行的,因此外部循环用于行,而内部循环用于行中的每个单元格。数组数组数组的方式似乎是面向列的,如果不将其视为反模式,则肯定是非标准的,并且非常不必要和困难

下面的演示将生成一个
,其中
以及位于所需位置的内容。这些函数是可重用的,并接受此模式:

Array of Arrays of Arrays 
[[[tH], [tD, tD, tD]], [[tH], [tD, tD, tD]], [[tH], [tD, tD, tD]]]

Simplified Linear Array
[tH, tD, tD, tD, tH, tD, tD, tD, tH, tD, tD, tD]
对于每个
tH
colQty
添加+1,并且每个列的
tD
数量必须相同。因此上面的示例应该有
colQty=3
。列数可以通过编程方式确定,但这将是一个全新的问题

下面的示例中对详细信息进行了注释

让精神错乱=[
[a]、[a1]、[a3]、[a5]、[a7]、[a9],
[b']、[b1'、[b2'、[b3'、[b4'、[b5'],
[c'],[c2',c4',c6',c8',c10']
];
//传入数组的数组和列数
函数列流(arrarrr、colQty){
//展平这个疯狂的数组,以避免处理嵌套数据
const dataArray=arrarrar.flat().flat();
//确定行数
const rowQty=dataArray.length/colQty;
//声明循环中使用的计数器
让r,c,i;
//创建一个HTML表
常数T=`;
常数hdr=`;
常数cel=`;
addHTML(T);
const table=document.querySelector('table');
const tHead=table.querySelector('tHead');
const tBody=table.querySelector('tBody');
//加上
对于(r=0;r
表格{
显示:内联表;
利润率:10px;
字体:3ch/1控制台;
}
运输署{
填充:6px;
边框顶部:1px黑色实心;
文本对齐:居中;
}
th,td{
右边框:1px黑色实心;
}
最后一个孩子,
td:最后一个孩子{
右边界:0;

}
@decpk回答了这个问题,但作为一个建议,您可能希望将数组重组为类似于
output={a:[a1,a2,a3],b:[b1,b2,b3]}
的结构,以便使用和迭代更友好的结构。谢谢!将尝试一下。如果我们有更多的数组值,即[[a],[a1,a2,a3],[[b],[b1 b2,b3][[c] ,[c1,c2,c3]]还是这两个?只需两个步骤就可以了?谢谢suresh。如果还有其他列,这也行吗?即[[a],[a1,a2,a3],[[b],[b1 b2,b3],[[c],[c1,c2,c3]]。上面的工作很好!但不幸的是谷歌应用程序脚本在???=]没有识别/得到错误:(请不要尝试。效果很好!非常感谢您为我节省了数小时来解决这个问题。我非常感谢您可以在
原始
中占用空间或
。您最后需要一个空单元格指示器。否则,您可以用直接分配到索引来代替
推送
。哇,这是一个非常好的解释。我知道非常感谢,谢谢