简体   繁体   English

从数组数据生成表

[英]Generate table from an array Data

I have got some data like below 我有一些像下面的数据

 var data = [ [21, [1,2] ], [22, [1,2] ] ];
 var const = [-1 , 0 , 1];

My requirement is to generate a table with below structure 我的要求是生成具有以下结构的表

 21, 22 are main column headers
 1, 2 are nested columns under 21, 22

For each 1,2 of 21, 22 I need to add const value as nested column headers So in above case 对于21、22中的每个1,2,我需要将const值添加为嵌套列标题,因此在上述情况下
21, 22 are main column headers, 1,2 will be nested columns under each 21, 22 const value -1, 0, 1 will be nested column headers under each 1, 2 of 21, 22 I have written the below code. 21,22是主列标题,1,2将是在每个21,22 const值-1,0,1下的嵌套列标题,在21,22,22的每个1,2下是嵌套列标题。 But that is not working as expected 但这不能按预期工作

function simplifyCols(obj) {
    var reform = {
        table : {}
    };
    for (var x = 0; x < obj.length; x++) {
        obj[x].push( const );
    }
    for(var i = 0, l = obj.length; i < l; i++){
        var key = obj[i];
        for (var j = 0, m = key.length; j < m; j++) {
            var colspan = 1;
            for (var k = j + 1; k < m; k++) {
                colspan *= key[k].length; 
            }
            reform.table[j] = reform.table[j] || [];
            reform.table[j].push({
                span : colspan,
                data : key[j]
            });
        }
    }
    return reform;
}
var cols = simplifyCols( data ).table;
var keys = Object.keys(cols).sort(function(a, b){
    return a - b;
});
var table = document.createElement('table');
document.body.appendChild(table);
for (var i = 0, l = keys.length; i < l; i++) {
    var keyData = cols[keys[i]], tr = document.createElement('tr');
    table.appendChild(tr);
    for (var j = 0, m = keyData.length; j < m; j++) {
        var eleData = keyData[j].data;
        if(eleData instanceof Array){
            for (var k = 0, n = eleData.length; k < n; k++) {
                var td = document.createElement('td');
                td.innerHTML = eleData[k];
                td.colSpan = keyData[j].span;
                tr.appendChild(td);
            }
        }else{
            var td = document.createElement('td');
            td.innerHTML = keyData[j].data;
            td.colSpan = keyData[j].span;
            tr.appendChild(td);
        }
    }
    table.appendChild(tr);
}
document.body.appendChild(table);

Please help to improve the logic and also make it work. 请帮助改善逻辑并使其起作用。 I am struck in the middle and could not proceed further 我被打中了,无法继续前进

Here is the HTML I am expecting from above 这是我期望从上面的HTML

fiddle here http://jsfiddle.net/4NS8d/ 在这里拨弄http://jsfiddle.net/4NS8d/

 <table>
    <tr> <td colspan="6">21</td> <td colspan="6">21</td> </tr>
    <tr> <td colspan="3">1</td> <td colspan="3">2</td> <td colspan="3">1</td> <td colspan="3">2</td> </tr>
    <tr> <td>-1</td> <td>0</td> <td>1</td><td>-1</td> <td>0</td> <td>1</td><td>-1</td> <td>0</td> <td>1</td><td>-1</td> <td>0</td> <td>1</td></tr>
 </table>

First of all you can not name var const. 首先,您不能命名var const。

Try this: 尝试这个:

var const2 = [-1 , 0 , 1];
function simplifyCols(obj) {
    var reform = {
        table : {}
    };
    for (var x = 0; x < obj.length; x++) {
        obj[x].push( const2 );
    }
    for(var i = 0, l = obj.length; i < l; i++){
        var key = obj[i];
        for (var j = 0, m = key.length; j < m; j++) {
            var colspan = 1;
            for (var k = j + 1; k < m; k++) {
                colspan *= key[k].length; 
            }
            reform.table[j] = reform.table[j] || [];
            reform.table[j].push({
                span : colspan,
                data : key[j]
            });
        }
    }
    return reform;
}
var data = [ [21, [1,2] ], [22, [1,2] ] ];
var cols = simplifyCols(data).table;
var keys = Object.keys(cols).sort(function(a, b){
    return a - b;
});
var table = document.createElement('table');
document.body.appendChild(table);
for (var i = 0, l = keys.length; i < l; i++) {
    var keyData = cols[keys[i]], tr = document.createElement('tr');
    table.appendChild(tr);
    for (var j = 0, m = keyData.length; j < m; j++) {
        var eleData = keyData[j].data;
        if(eleData instanceof Array){
            for (var k = 0, n = eleData.length; k < n; k++) {
                var td = document.createElement('td');
                td.innerHTML = eleData[k];
                td.colSpan = keyData[j].span;
                tr.appendChild(td);
            }
        }else{
            var td = document.createElement('td');
            td.innerHTML = keyData[j].data;
            td.colSpan = keyData[j].span;
            tr.appendChild(td);
        }
    }
    table.appendChild(tr);
}
document.body.appendChild(table);

http://jsfiddle.net/zxvnp/ http://jsfiddle.net/zxvnp/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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