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

JavaScript如何将对象的静态元素追加到对象数组的每个对象中?

给数组每个对象追加公共属性的解决方案

嘿,我来帮你搞定这个问题!其实实现需求的方法很简单,甚至比你尝试的map+Object.keys组合更直观,先看最简洁的实现:

方法1:ES6对象展开运算符(推荐)

这是目前最简洁易读的写法,直接利用对象展开语法合并属性:

const data = { type: "hello", point: 1.8 };
const raw = [ 
  { x: [1, 2], y: [-1.1, -1.2] }, 
  { x: [14, 24], y: [-1.14, 1.24] } 
];

// 核心代码:用map遍历数组,每个对象合并data的属性
const result = raw.map(item => ({ ...item, ...data }));

这段代码会遍历raw数组的每个元素,把原对象item的所有属性和data的属性展开合并成一个新对象,完全符合你想要的结果,而且不会修改原数组里的对象(纯函数写法,更安全)。

方法2:用Object.keys实现(兼容旧环境)

如果你因为环境限制必须用Object.keys,那可能是之前的写法没处理好对象复制的问题,正确的写法应该是:

const result = raw.map(item => {
  // 先复制原对象的属性,避免修改原数组的原始对象
  const newItem = Object.assign({}, item);
  // 遍历data的所有键,逐个追加到新对象
  Object.keys(data).forEach(key => {
    newItem[key] = data[key];
  });
  return newItem;
});

这里要注意必须先复制原对象,如果直接修改item的话,会把原数组里的对象也改掉,这通常不是我们想要的行为。

为什么你之前的尝试没成功?

推测你可能是在map里直接修改了原对象,或者在遍历Object.keys时没有正确创建新对象。比如如果写成这样就会有问题:

// 错误示例:直接修改原对象,虽然结果对,但污染了原数组
const result = raw.map(item => {
  Object.keys(data).forEach(key => {
    item[key] = data[key];
  });
  return item;
});

这种写法会改变raw数组里的原始对象,而我们通常希望保持原数据不变,所以一定要创建新对象来合并属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:00:09