javascript - 将 JSON 处理为表格布局的特定行
问题描述
我有这个对象数组
const raw = [
{
wsDescPL: 'DB276',
glFull: 'Refunds',
amount: 469.34,
adjAmount: 469.34
},
{
wsDescPL: 'DB276',
glFull: 'Rent Income',
amount: -2405.02,
adjAmount: -2405.02
},
{
wsDescPL: 'ADMIN',
glFull: 'Sales',
amount: 0,
adjAmount: 0
},
{
wsDescPL: 'DB276',
glFull: 'Sales',
amount: 2146187.47,
adjAmount: 2146187.47
},
{
wsDescPL: 'WAREHOUSE',
glFull: 'Sales',
amount: 0,
adjAmount: 0
},
{
wsDescPL: 'ADMIN',
glFull: 'Sales Variance',
amount: 0,
adjAmount: 0
},
{
wsDescPL: 'DB276',
glFull: 'Sales Variance',
amount: -5369,
adjAmount: -5369
},
{
wsDescPL: 'WAREHOUSE',
glFull: 'Sales Variance',
amount: 0,
adjAmount: 0
}
]
我正在尝试将其转换为以下格式:
const desired = [
['', 'ADMIN', 'DB276', 'WAREHOUSE', 'TOTAL']
['Refunds', 0, 469.34, 0, 469.34]
['Rent Income', 0, -2405.02, 0, -2405.02]
['Sales', 0, 2146187.47, 0, 2146187]
['Sales Variance', 0, -5369, 0, -5369]
]
我的问题是管理员和仓库可能有也可能没有“退款”(或其他 gl 代码)条目。
另一层是它glFull
不是通用的。其他位置可能有不同的 gl。
我一直在疯狂地试图弄清楚如何将它放在所需的布局中。
由于 UI 显示表格的方式,它需要位于多维数组中。
如果我改变它,我将不得不改变一大堆。
解决方案
你想使用Array.prototype.forEach
和Object.values
这样的组合:
const arr = [];
raw.forEach((item) => {
arr.push(Object.values(item));
});
console.log(arr);
如果响应中有可选字段,那么我建议从 API 返回空值,而不是使用 JS 填充数组。
但是,如果您别无选择,那么我能看到的唯一方法就是这样(这很脏):
const arr = [];
raw.forEach((item, index) => {
arr[index] = [
item.hasOwnProperty('wsDescPL') ? item.wsDescPL : '',
item.hasOwnProperty('glFull') ? item.glFull : '',
item.hasOwnProperty('amount') ? item.amount : '',
item.hasOwnProperty('adjAmount') ? item.adjAmount : ''
];
});
console.log(arr);
推荐阅读
- javascript - 如何使用纯JS通过api对数据进行轮播
- android - 在 Android 中使用光压缩器进行视频压缩需要花费大量时间
- sql-server - SQL Server Express 和 SSRS 报告订阅 - SQL 代理服务未运行
- css - php自动生成的表| 如何在一侧设置限制 5 tr
- sql - 不能使用 having 子句,因为它既不包含在聚合函数中,也不包含在 group by 子句中
- filter - 为什么从数组中过滤未定义的值不起作用?
- mysql - 用户 'me'@'localhost' 的访问被拒绝(使用密码:YES)
- authentication - Azure APIM:将客户端证书发送到后端进行身份验证
- c++ - 视窗/Visual c++ | x64 中结构的奇怪行为
- r - Filter() 函数无法识别我的数据