如何不使用for-in循环将对象的键值对转换为指定结构的对象数组
如何不使用for-in循环将对象的键值对转换为指定结构的对象数组
嘿,很高兴帮你解决这个问题!既然不想用for-in循环,这里有两个更简洁且符合现代JS风格的方案,一起来看看:
方案一:使用Object.entries() + Array.map()
这是最直观的方法,Object.entries()会把你的对象转换成一个包含[键, 值]子数组的二维数组,接着用map()遍历这个数组,把每个子数组直接映射成你需要的对象结构。
const costCentres = { "11738838-bf34-11e9-9c1c-063863da20d0": "Refit 2018", "f30d72f4-a16a-11e9-9c1c-063863da20d0": "Refit 2019", "f7fa34ed-a16a-11e9-9c1c-063863da20d0": "Refit 2020" }; const centresToEntities = Object.entries(costCentres).map(([id, name]) => ({ id, type: "Cost Centre", name, chosen: false }));
这里用了解构赋值([id, name]),直接把每个子数组的第一个元素作为id,第二个作为name,代码看起来非常清爽。
方案二:使用Object.keys() + Array.map()
如果你更习惯单独处理对象的键,也可以先通过Object.keys()获取所有键的数组,再遍历每个键去对应取值,生成目标对象:
const costCentres = { "11738838-bf34-11e9-9c1c-063863da20d0": "Refit 2018", "f30d72f4-a16a-11e9-9c1c-063863da20d0": "Refit 2019", "f7fa34ed-a16a-11e9-9c1c-063863da20d0": "Refit 2020" }; const centresToEntities = Object.keys(costCentres).map(id => ({ id, type: "Cost Centre", name: costCentres[id], chosen: false }));
这两种方法都比for-in循环更简洁,还能避免for-in可能遍历到对象原型链上属性的潜在问题(虽然你的场景里用for-in也没问题,但函数式写法更安全优雅),而且一行就能完成转换,非常高效~
备注:内容来源于stack exchange,提问作者dariusz
相关产品推荐
相关产品推荐

