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

JavaScript 提取对象数组name属性生成全0值计数器对象的实现问题

问题根源
  • 方法选型不匹配:map的原生设计逻辑是遍历数组时,为每一个元素生成对应的映射值,最终返回和原数组长度完全一致的新数组。你每轮遍历返回一个独立的单键对象,最终得到单键对象组成的数组是map的正常输出,和你需要的单计数器对象的目标结构从设计上就不匹配。
  • 语法书写疏漏:你写的objectArray((elem) => {...})是直接把数组当函数调用,正确的map调用需要显式加上.map方法名,即objectArray.map((elem) => {...})。
正确实现方式

方案1:使用reduce聚合(最推荐)

这是「数组项转对象键值对」场景的通用适配写法,不需要生成中间数组,遍历过程中直接把所有键值对合并到同一个初始对象里:

const counterObject = objectArray.reduce((acc, curr) => {
  // 从当前数组项取出name作为键,统一赋值为0,写入累计对象
  acc[curr.name] = 0
  // 将累计对象返回给下一轮遍历
  return acc
}, {}) // 累计值的初始值为空对象

方案2:基于原有map逻辑二次合并

如果你不想改动已经写好的map遍历逻辑,只需要把map输出的单键对象数组,通过Object.assign把所有属性合并到同一个空对象即可:

const counterObject = Object.assign(
  {},
  ...objectArray.map(elem => ({[elem.name]: 0}))
)

补充说明:你之前得到的结果里出现Text/Upload/Date/Link这类额外键,是因为你实际运行的objectArray本身就包含这些name值的项,不是代码方法的问题。只要objectArray的内容和你示例中给出的三个对象一致,上面两种方案输出的结果完全匹配你要求的counterObject结构。


内容的提问来源于stack exchange,提问作者Stanciu Patrick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 07:54:05