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

JavaScript中能否通过for等方法将第一个数组对象合并至第二个数组每个元素?

JavaScript中合并数组对象的问题与解决方案

需求描述

想要通过for循环或其他方法,将第一个数组的对象添加至第二个数组的每个元素中,得到指定的输出效果。

现有数组

let First = [
  {lesson: 1},
  {lesson: 2},
  {lesson: 3}
]
let Second = [
  {
    name: "John",
    age : 26,
    lesson: 1
  },
  {
    name: "Ken",
    age : 40,
    lesson: 2
  },
  {
    name: "William",
    age : 18,
    lesson: 3
  }
]

用户预期输出(无法实现)

[
  {
    name: "John",
    age : 26,
    lesson: 1,
    lesson: 2,
    lesson: 3
  },
  {
    name: "Ken",
    age : 40,
    lesson: 1,
    lesson: 2,
    lesson: 3
  },
  {
    name: "William",
    age : 18,
    lesson: 1,
    lesson: 2,
    lesson: 3
  }
]

关键问题说明

JavaScript对象不允许存在重复属性,若尝试添加多个同名的lesson属性,后面的属性会直接覆盖前面的,所以上述预期输出的格式无法实现。

正确的实现方案

我们可以将单个lesson属性改为数组类型(比如命名为lessons),把所有课程编号存入数组中,这样既符合JS语法,也能满足收集所有课程的需求。

方法1:使用for循环实现

// 提取First数组中的所有lesson值
const lessons = First.map(item => item.lesson);

// 遍历Second数组,为每个对象添加lessons数组
for (let i = 0; i < Second.length; i++) {
  // 复制原对象避免修改原数据,再添加lessons属性
  Second[i] = { ...Second[i], lessons: [...lessons] };
  // 若不需要保留原lesson属性,可以删除它
  // delete Second[i].lesson;
}

console.log(Second);

方法2:使用Array.map()方法实现(更简洁)

const lessons = First.map(item => item.lesson);
const result = Second.map(person => ({
  ...person,
  lessons: [...lessons]
  // 可选:删除原lesson属性
  // ...Object.fromEntries(Object.entries(person).filter(([key]) => key !== 'lesson')),
  // lessons: [...lessons]
}));

console.log(result);

最终输出示例

[
  { name: 'John', age: 26, lesson: 1, lessons: [ 1, 2, 3 ] },
  { name: 'Ken', age: 40, lesson: 2, lessons: [ 1, 2, 3 ] },
  { name: 'William', age: 18, lesson: 3, lessons: [ 1, 2, 3 ] }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:01:04