JavaScript如何将对象数组转换为带列名的datatable格式?
实现方案
你可以直接用「提取表头 + 遍历取值拼接」的方式实现,代码非常简洁:
// 提取第一个对象的所有key作为表头 const headers = Object.keys(source[0]) // 遍历源数组,提取每个对象的value并统一转成字符串(匹配你需要的输出值格式) const rows = source.map(item => Object.values(item).map(val => String(val))) // 合并表头和数据行得到最终datatable const datatable = [headers, ...rows]
执行后得到的datatable结果完全符合你的要求:
[ ['day', 'deliveries', 'hours'], ['1', '16', '9'], ['2', '19', '11'] ]
额外说明
你之前拼接错误的核心原因是:直接用concat把表头一维数组和行二维数组合并,会把行的子数组当成表头数组的普通元素拼接进去,正确做法是把表头作为二维数组的第一个元素,再用展开运算符把所有行数据塞到后续位置即可。
如果要兼容源数组为空的场景,可以加一层判断兜底:
const datatable = source.length ? [Object.keys(source[0]), ...source.map(item => Object.values(item).map(String))] : []
内容的提问来源于stack exchange,提问作者Aman
相关产品推荐
相关产品推荐

