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

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

核心前提说明

JavaScript 普通对象不允许存在重复的键,你给出的目标结构中三个键均为Hari Libur,实际运行时只会保留最后一个键对应的值,前面的条目会被完全覆盖,该结构本身不具备实用性,更建议你改用数组存储所有假期日期。

为什么Object.assign会出现数字索引键

你之前应该是直接把数组作为参数传入Object.assign,示例如下:

// 错误写法示例
const wrongResult = Object.assign({}, inputArray)

数组本身属于类数组对象,数字索引是它的可枚举自有属性,Object.assign会把所有源对象的可枚举自有属性复制到目标对象,因此就出现了0、1、2这类数字键。

实现方案

方案1:推荐的合法结构(保留所有数据)

把所有假期条目存为Hari Libur键对应的数组,不会丢失数据:

const input = [ 
   { 
      "Hari Libur":{ 
         "date":"12-07" 
      } 
   }, 
   { 
      "Hari Libur":{ 
         "date":"12-12" 
      } 
   }, 
   { 
      "Hari Libur":{ 
         "date":"12-04" 
    } 
}]

const result = {
  "Hari Libur": input.map(item => {
    // 把日期中的-替换为/
    const formattedDate = item["Hari Libur"].date.replaceAll('-', '/')
    return { date: formattedDate }
  })
}

输出结果:

{
  "Hari Libur": [
    { date: "12/07" },
    { date: "12/12" },
    { date: "12/04" }
  ]
}

方案2:仅保留最后一个条目(匹配你给出的目标结构特性)

如果你坚持要单键结构,最终只会保留最后一个假期条目:

const result = input.reduce((acc, cur) => {
  const formattedDate = cur["Hari Libur"].date.replaceAll('-', '/')
  // 重复赋值会覆盖之前的同键值
  acc["Hari Libur"] = { date: formattedDate }
  return acc
}, {})

输出结果:

{ "Hari Libur": { date: "12/04" } }

内容的提问来源于stack exchange,提问作者Bagus Amrullah Fikri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:15:01