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

TypeScript中如何将对象数组展开合并到已有对象?

如何将对象数组的属性合并为单个平面对象?

你当前通过map生成了一个对象数组:

const calcRowCssClasses = (<string[]>context.dataItem.cssClasses).map(
  (cssClass) => {
    return { [cssClass]: true };
  }
);

得到的结果是:

[
  { "custom-calcrow-1": true },
  { "custom-calcrow-2": true }
]

你尝试用{ calcrow: true, ...calcRowCssClasses }合并时,得到带数组索引键的对象,这是因为展开运算符作用于数组时,会将数组索引作为对象键,数组元素作为对应值,所以才会出现0、1这类键。

下面提供几种解决方法:

方法1:使用Object.assign

Object.assign可接收多个对象参数,将后续对象的属性合并到第一个对象中。通过展开对象数组,把每个对象作为单独参数传入:

const finalObj = Object.assign({ calcrow: true }, ...calcRowCssClasses);

执行后finalObj即为预期结果:

{
  "calcrow": true,
  "custom-calcrow-1": true,
  "custom-calcrow-2": true
}

方法2:使用数组reduce方法

通过reduce遍历对象数组,逐个将对象属性合并到初始对象上:

const finalObj = calcRowCssClasses.reduce((acc, current) => {
  return { ...acc, ...current };
}, { calcrow: true });

这里acc是累加器(初始值为{ calcrow: true }),每次迭代都把当前对象current的属性展开合并到acc中。

方法3:优化初始生成逻辑(一步到位)

既然最终目标是生成单个对象,可跳过map生成数组的步骤,直接用reduce构建目标对象:

const finalObj = (<string[]>context.dataItem.cssClasses).reduce((acc, cssClass) => {
  acc[cssClass] = true;
  return acc;
}, { calcrow: true });

这种方式更高效,无需额外处理对象数组,直接得到最终结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 18:22:26