You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 10:24:38