微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从像{col1:[cell,cell],col2:[cell,cell,cell]}之类的键列表对象在Svelte中创建表

如何解决从像{col1:[cell,cell],col2:[cell,cell,cell]}之类的键列表对象在Svelte中创建表

我需要一个表,该表将像一个波纹管(数据)这样的对象作为道具并创建一个表。 我找到了一些js库,它们可以帮助从json创建表,但我希望使用更简单,更“精巧”的方法

我被困在生成行上。

<script>

// export let data

let data = {
    ignore1: 85,ignore2: "2020-10-31",ignore3: "some data",ignore4: "another data",ignore5: "../../assets/img/avatar.jpg",col1: ["cell1","cell1","cell1"],col2: ["cell2","cell2","cell2"],col3: ["cell3","cell3","cell3"]
}


let columns = []
let values = []
for (const [col,val] of Object.entries(data)) {  
  if (Array.isArray(val)) {
    columns.push(col)
    values.push(val)
  }
}

console.log(columns)
console.log(values)

// From the list of values get the max len of a list 
let rows_len = Math.max(0,...values.map(item => item.length))

// normalize lists to have the same length as the biggest one in the nested lists
let rows = values.map(li => {
    if (li.length != rows_len) {
        let fill_arr = Array.from({length: rows_len - li.length}).map(el => "")
        li.push(...fill_arr)
    }
    return li
})

console.log(rows)

let rows_range = Array.from({length: rows_len}).map(el => "")

</script>


<table class="w-full">
<thead class="capitalize border-b-2">
    <tr>
        {#each columns as col}
            <td>{col}</td>
        {/each}
    </tr>
</thead>

<tbody>
    {#each rows[0] as row,i}
        <td>{row}</td>
    {/each}
</tbody>

</table>

解决方法

您的模板中需要一个嵌套循环。一是行,一是行中的单元格:

<tbody>
  {#each rows as row}
    <tr>
      {#each row as cell}
        <td>{cell}</td>
      {/each}
    </tr>
  {/each}
</tbody>
,

结合rixo的答案,我需要创建一个新列表,该列表一次从所有3个列表中获取每个索引,并创建另一个列表。在模板中,遍历html_rows而不是行。

let cols_range = Array.from({length: columns.length}).map(el => "")
let rows_range = Array.from({length: rows_len}).map(el => "")

// console.log(`${rows_range.length}rows,${cols_range.length}cols`)

let html_rows = []
for (let ir = 0; ir < rows_range.length; ir++) {

    let html_row = []
    for (let ic = 0; ic < cols_range.length; ic++) {
        console.log(ic,ir,rows[ic][ir])
        html_row.push(rows[ic][ir])
    }

    html_rows.push(html_row)
}

回复:https://svelte.dev/repl/d417680037274d82b3f0fe2cd807d4a2?version=3.29.4

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。