javascript - 如何映射数组并使用索引以消除空值?
问题描述
我有两个数组keyVals
,rows
定义如下:
keyVals =
[
"Status",
"ErrorHeading",
"ErrorDetail"
]
rows =
[
{
"Hostname": "ABC",
"name": "Check1",
"Status": "PASS",
"ErrorHeading": "",
"ErrorDetail": ""
},
{
"Hostname": "ABC",
"name": "Check2",
"Status": "PASS",
"ErrorHeading": "",
"ErrorDetail": ""
},
{
"Hostname": "ABC",
"name": "Check3",
"Status": "FAIL",
"ErrorHeading": "Heading3",
"ErrorDetail": "ErrorDetails3"
}
]
我编写了以下代码来生成Res
:
function dArray(rows, keyVals) {
const response = Object.values(rows.reduce((res, {Hostname, name, ...o}) => {
res[Hostname] = res[Hostname] || {Hostname};
keyVals.forEach(kv => res[Hostname][name + kv] = o[kv]);
return res;
}, {}));
return response;
}
const Res = dArray(rows, keyVals);
Res
值如下所示:
Res =
[
{
"Hostname": "ABC",
"Check1kStatus": "PASS",
"Check1ErrorHeading": "",
"Check1ErrorDetail": "",
"Check2Status": "PASS",
"Check2ErrorHeading": "",
"Check2ErrorDetail": "",
"Check3Status": "FAIL",
"Check3ErrorHeading": "Heading3",
"Check3ErrorDetail": "ErrorDetails3"
}
]
我想修改function dArray(rows, keyVals)
以Res
排除所有空值,如下所示:
Res =
[
{
"Hostname": "ABC",
"Check1kStatus": "PASS",
"Check2Status": "PASS",
"Check3Status": "FAIL",
"Check3ErrorHeading": "Heading3",
"Check3ErrorDetail": "ErrorDetails3"
}
]
解决方案
function dArray(rows, keyVals) {
const response = Object.values(rows.reduce((res, {Hostname, name}) => {
res[Hostname] = res[Hostname] || {Hostname};
keyVals.forEach(kv => res[Hostname][name + kv] = o[kv]);
return res;
}, {}));
let keys=Object.keys(response[0]);
for(let i=0,l=keys.length;i<l;i++){
if(!response[0][keys[i]]){
delete response[0][keys[i]];
}
}
return response;
}
推荐阅读
- python - ValueError:无法将字符串转换为浮点数 - 在 google colab 中
- python - 如何在网页中输入
- r - 将汇总数据帧从长转换为宽(不使用 reshape、reshape2、tydr)
- reactjs - React componentWillUpdate 每秒运行一次并且条件不起作用
- firebase - 来自火力基地的警告
- gremlin - 如何使用 gremlin 计算 Jaccard 相似度
- intellij-idea - IntelliJ 没有强制执行右边距
- android - Android共享内存和内存映射
- javascript - 为什么我的数组没有删除正确的记录
- mongodb - docker-compose:运行命令而不覆盖任何内容