javascript - 数组映射并跳过未定义的动态对象属性
问题描述
试图弄清楚如何在“地图”函数中创建动态对象。映射基于大型 json 对象,我正在尝试找到一种减小最终数组大小的方法。理想情况下不要添加具有未定义值的属性。即,如果'offst: undefined',则跳过此属性,但添加其他具有适当int 值的属性。是否可以在不再次遍历数组的情况下做这样的事情?Array 有超过 150k 个条目,因此性能损失会很大。
this.mapData = this.mapData
.map((e) => ({
p: e.p,
lat: e.lat,
lng: e.lng,
y: Object.keys(e.values)[0],
ct: Object.values(e.values)[0].ct, // add ct: only if not undefined
cp: Object.values(e.values)[0].cp,
w: Object.values(e.values)[0].wp,
offst: Object.values(e.values)[0].offst,
onst: Object.values(e.values)[0].onst,
ertn: Object.values(e.values)[0].ertn,
ertl: Object.values(e.values)[0].ertl,
dst: Object.values(e.values)[0].dst,
ft: Object.values(e.values)[0].ft,
}))
.filter((item) => item.chargersTotal !== 0);
return this.mapData;
示例 json 数据:
[
{
"p":"BA1 2RU",
"lat":"51.38934",
"lng":"-2.364467",
"values":{
"2019":{
"ct":0.0
"dst":5.0
"onst":1.0
}
}
},
{
"p":"BA10 0AA",
"lat":"51.112275",
"lng":"-2.453865",
"values":{
"2019":{
"offst":1.0,
"ct":1.0
}
}
},
{
"p":"BA10 0AB",
"lat":"51.112463",
"lng":"-2.454067",
"values":{
"2019":{
"ct":0.0
}
}
}
]
解决方案
使用省略号合并Object.values(e.values)[0]
到您要返回的对象中。然后它只会合并存在的属性。
this.mapData = this.mapData
.map((e) => {
let firstKey = Object.keys(e.values)[0];
let firstVal = e.values[firstKey];
return {
p: e.p,
lat: e.lat,
lng: e.lng,
y: firstKey,
...firstVal
};
})
.filter((item) => item.chargersTotal !== 0);
推荐阅读
- python - Web3.py - 即使安装了 web3,也无法导入“web3”
- javascript - 如何根据字符串的值执行函数?
- html - 为什么“添加注释”按钮会出现异常并在控制台上打印 null?
- sql - 加入两个没有关系postgres的表?
- vector - 在 Clojure 中使用 for 更新地图的值
- flutter - Flutter 中的图像拉伸 FittedBox
- sql - 根据其他表中的份额拆分价值
- javascript - 极坐标轴线颜色修改
- python - 如何在 Python 中的多处理进程内的执行之间调用休眠池?
- r - 编织 rmarkdown 时的格式化问题