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

如何在JavaScript中从aaa数组创建指定结构的对象?

问题描述

给定如下JavaScript数组:

const aaa = [
  {
    "objectid": 111,
    "userid": "1",
    "associationid": "123"
  },
  {
    "objectid": 111,
    "userid": "2",
    "associationid": "456"
  }
];

需要生成指定结构的对象:
{"objectid": "111", "contacts" : [{"isdelete": "1", "contactid": "1", "associationid":"123"},{"isdelete": "1", "contactid": "2", "associationid":"456"}]}

尝试用reduce方法实现但未成功,代码如下:

aaa.reduce((accumulator, {objectid,userid,associationid}) =>
  ({ ...accumulator, "objectid": objectid, "contacts": (accumulator["contacts"] || []).push(({"isdelete": "1", "contactid": userid, associationid})) }),
  {})
问题分析与解决

你的代码失效核心原因是**Array.push()返回的是数组新长度,而非修改后的数组本身**,这会导致contacts最终被赋值为数字,而非预期的数组结构。

正确实现方式如下:

const result = aaa.reduce((accumulator, { objectid, userid, associationid }) => ({
  ...accumulator,
  objectid: String(objectid), // 原objectid为数字,按期望转成字符串类型
  contacts: [
    ...(accumulator.contacts || []),
    { isdelete: "1", contactid: userid, associationid }
  ]
}), {});

console.log(result);

关键细节说明:

  • 使用扩展运算符...展开原有contacts数组(或空数组),再追加新的联系人对象,确保返回的是完整数组而非push的长度值。
  • 示例中原数组的objectid是数字类型,而期望结果为字符串,因此用String(objectid)做类型转换(若不需要转换可直接保留原数值)。
  • 假设数组中所有元素的objectid一致,若存在多objectid分组需求,需额外添加分组逻辑,本实现基于示例数据默认统一objectid处理。

内容的提问来源于stack exchange,提问作者Karim Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:15:57