gpt4 book ai didi

javascript - 从javascript数组将行转换为列

转载 作者:行者123 更新时间:2023-12-04 03:09:08 24 4
gpt4 key购买 nike

我正在研究 ReactJS,想知道是否有办法将 javascript 数组从行转换为列。

[
{ study: 'KOOS', date: '05/06/2005', question: 'Standing upright', answer: 'Moderate' },
{ study: 'KOOS', date: '05/06/2006', question: 'Standing upright', answer: 'Severe' },
{ study: 'KOOS', date: '05/06/2007', question: 'Standing upright', answer: 'Extreme' },
{ study: 'KOOS', date: '05/06/2008', question: 'Standing upright', answer: 'Severe' },
{ study: 'KOOS', date: '05/06/2005', question: 'Going up or down stairs', answer: 'Extreme' },
{ study: 'KOOS', date: '05/06/2006', question: 'Going up or down stairs', answer: 'Moderate' },
{ study: 'KOOS', date: '05/06/2007', question: 'Going up or down stairs', answer: 'Extreme' },
{ study: 'KOOS', date: '05/06/2008', question: 'Going up or down stairs', answer: 'Moderate' }
]

我想把它转换成这样的 html table/div 数据:
Study: Koos
Question | 05/06/2005 | 05/06/2006 | 05/06/2007 | 05/06/2008
Standing upright | Moderate | Severe | Extreme | Severe
Going up or down stairs | Extreme | Moderate | Extreme | Moderate

我发现了这个优秀的图书馆 - json-to-pivot-json .这是我想使用的东西,但唯一的问题是聚合值(value)。

我在 sql 中看到了很多示例,但在 javascript 中找不到类似的东西。

为了帮助其他人,我添加了完整的 JSX 代码以显示 Rafael 建议的结果.
var output = coll2tbl(surveyResult, "question", "date", "answer"); 

const mappedCells = output.cells.map((row, index) => {
row.unshift(output.row_headers[index]);
return row;
})

<table>
<thead>
<th>Question</th>
{
output.col_headers.map(c => {
return (
<th>{c}</th>
);
})
}
</thead>
<tbody>
{
mappedCells.map(row => (
<tr>{ row.map(cell => (<td>{cell}</td>))}</tr>
))
}
</tbody>
</table>

最佳答案

收集到表就绪数据结构

将集合和适当的属性描述符传递给 coll2tbl函数,它将输出一个表就绪的数据结构:

var data = [
{ study: 'KOOS', date: '05/06/2005', question: 'Standing upright', answer: 'Moderate' },
{ study: 'KOOS', date: '05/06/2006', question: 'Standing upright', answer: 'Severe' },
{ study: 'KOOS', date: '05/06/2007', question: 'Standing upright', answer: 'Extreme' },
{ study: 'KOOS', date: '05/06/2008', question: 'Standing upright', answer: 'Severe' },
{ study: 'KOOS', date: '05/06/2005', question: 'Going up or down stairs', answer: 'Extreme' },
{ study: 'KOOS', date: '05/06/2006', question: 'Going up or down stairs', answer: 'Moderate' },
{ study: 'KOOS', date: '05/06/2007', question: 'Going up or down stairs', answer: 'Extreme' },
{ study: 'KOOS', date: '05/06/2008', question: 'Going up or down stairs', answer: 'Moderate' }
];

function get_prop(obj, prop) {
return prop.split('.').reduce((o,k) => obj[k], obj);
}

function coll2tbl(coll, row_header, col_header, cell) {
var table = {};
var row_headers = [];
var cols = {};

coll.forEach(a => {
var h = get_prop(a, row_header);
if (h in table === false) {
table[h] = {};
row_headers.push(h);
}
var c = get_prop(a, col_header);
cols[c] = null;
table[h][c] = get_prop(a, cell);
});

var cells = [];
for (var row in table)
cells.push(Object.values(table[row]));

return { row_headers, col_headers: Object.keys(cols), cells };
}

var table = coll2tbl(data, 'question', 'date', 'answer');
console.log(table);

输出:
{ row_headers: [ 'Standing upright', 'Going up or down stairs' ],
col_headers: [ '05/06/2005', '05/06/2006', '05/06/2007', '05/06/2008' ],
cells:
[ [ 'Moderate', 'Severe', 'Extreme', 'Severe' ],
[ 'Extreme', 'Moderate', 'Extreme', 'Moderate' ] ] }

制作头饰
  • 添加静态ththead 的开头,这是您的Question字符串会去。
  • 添加 th每 ch 在 col_headers

  • 制作 body
  • 迭代 cellscoll2tbl() 返回.
  • 每次父迭代,创建一个新的 tr .
  • 通过使用父迭代器的计数器来添加行标题单元格以获取相应的行标题(table.row_headers[i])。
  • 内部循环将创建单元格 td , (table.cells[i][j])。

  • 理想情况下,您将制作一个采用此数据结构并为您创建 html 的 react 组件。

    关于javascript - 从javascript数组将行转换为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46699919/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com