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

JS中如何为数组元素添加对象属性及对应合并数组对象?

解决方案:对象与数组合并问题

第一个问题:给数组中每个对象添加统一属性

你之前的问题出在obj1是数组而非普通对象,Object.assign会把数组的索引当作对象的键来处理,所以才会把obj2的属性当成第三个“元素”。要让数组里的每个对象都带上animal: 'dog',我们需要遍历数组,给每个元素单独合并obj2的属性:

用Array.map()结合Object.assign就能轻松实现:

var obj1 = [{ food: 'pizza', car: 'ford'}, {food:'apple',car:'volvo'}]; 
var obj2 = { animal: 'dog' };

// 遍历每个对象,合并成新对象
var allRules = obj1.map(item => Object.assign({}, item, obj2));

console.log(allRules);
// 输出结果:
// [{ food: 'pizza', car: 'ford', animal: 'dog' }, { food: 'apple', car: 'volvo', animal: 'dog' }]

解释一下:

  • map()会遍历数组中的每一个元素
  • Object.assign({}, item, obj2)会创建一个新对象,先复制item的属性,再把obj2的属性加进去,这样不会修改原数组的对象

如果喜欢更简洁的ES6语法,也可以用扩展运算符:

var allRules = obj1.map(item => ({ ...item, ...obj2 }));

第二个问题:两个数组对应位置的对象合并

如果是两个数组,要把对应索引的对象合并到一起,同样可以用map(),利用它的第二个参数(当前元素的索引)来匹配另一个数组的对应元素:

基础实现代码:

var arr1 = [{ food: 'pizza', car: 'ford' }, { food: 'apple', car: 'volvo' } ]; 
var arr2 = [{ animal: 'dog' }, {animal:'cat'} ];

var mergedArr = arr1.map((item, index) => Object.assign({}, item, arr2[index]));

console.log(mergedArr);
// 输出结果:
// [{ food: 'pizza', car: 'ford', animal: 'dog' }, { food: 'apple', car: 'volvo', animal: 'cat' }]

额外优化:处理数组长度不一致的情况

如果两个数组长度不一样(比如arr1比arr2长),arr2[index]会返回undefined,这时候合并会出问题。可以加个默认值,确保即使没有对应元素也不会报错:

var mergedArr = arr1.map((item, index) => ({
  ...item,
  ...(arr2[index] || {}) // 如果arr2[index]不存在,就合并空对象
}));

这样不管两个数组长度是否一致,都能正常生成合并后的数组啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:35:42