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

如何将JavaScript数组数据转换为指定结构的键值对对象

JavaScript 数组转指定结构对象实现方案

实现逻辑说明

核心逻辑是遍历原数组,逐一把每个元素的name属性值作为结果对象的键,对应需要的数值属性(本场景为starCount)作为键对应的值即可,以下是几种常用实现方式:


方法1:reduce 实现(最常用简洁写法)

reduce 是数组转聚合结果的首选方法,初始值传空对象,遍历过程中逐次给对象挂载键值对:

const data = [
  { name: 'hcs_utils', starCount: 0 },
  { name: 'K', starCount: 0 },
  { name: 'Heroes of Wesnoth', starCount: 0 },
  { name: 'Leiningen', starCount: 1 },
  { name: 'TearDownWalls', starCount: 1 }
]

const result = data.reduce((res, item) => {
  res[item.name] = item.starCount
  return res
}, {})

运行后得到的结果结构和需求完全匹配:

{
  "hcs_utils": 0,
  "K": 0,
  "Heroes of Wesnoth": 0,
  "Leiningen": 1,
  "TearDownWalls": 1
}

方法2:for 循环实现(兼容性最佳)

如果需要兼容极低版本JS环境,直接用基础for循环遍历即可,逻辑无依赖:

const result = {}
for (let i = 0; i < data.length; i++) {
  const currentItem = data[i]
  result[currentItem.name] = currentItem.starCount
}

方法3:Object.fromEntries 实现(ES2022+ 极简写法)

支持ES2022及以上标准的环境中,可以先把数组映射为[键, 值]格式的二维数组,再直接通过Object.fromEntries转成对象:

const result = Object.fromEntries(
  data.map(item => [item.name, item.starCount])
)

注意事项

由于JS对象的键具有唯一性,如果原数组中存在多个name值相同的元素,后遍历到的元素值会覆盖前序同键的值。如果需要做同名值累加等自定义逻辑,只需在赋值步骤增加对应处理即可,例如统计同名项目总star数的写法:

// 同名starCount累加示例
const countResult = data.reduce((res, item) => {
  res[item.name] = (res[item.name] ?? 0) + item.starCount
  return res
}, {})

内容的提问来源于stack exchange,提问作者sed kolod

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:51:19