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
相关产品推荐
相关产品推荐

