如何将两个不同长度的动态数组合并为指定结构的对象数组?
合并动态数组生成指定结构的数组
需求说明
需要合并两个长度动态变化的数组,生成符合以下要求的finalArray:
- 将
array1中的每个元素作为键,空数组作为对应值,添加到array2的每个对象中 - 将
array2对象原有的name字段替换为users字段,保留原字段值
实现代码
const array1 = [7665, 7666]; const array2 = [ { "id": 1, "name": "user-1" }, { "id": 2, "name": "user-2" }, { "id": 3, "name": "user-3" } ]; // 把array1转换为可复用的键值对结构 const extraFields = array1.reduce((obj, key) => { obj[key] = []; return obj; }, {}); // 遍历array2生成目标数组 const finalArray = array2.map(item => ({ ...extraFields, users: item.name })); console.log(finalArray);
代码说明
- 生成统一扩展字段:用
reduce遍历array1,将每个元素转为对象的键,对应值设为空数组,得到可复用的扩展对象extraFields,适配array1长度动态变化的场景 - 构建目标数组:用
map遍历array2的每个对象,通过对象展开运算符把extraFields的键值对加入新对象,同时添加users字段并赋值为原对象的name值,直接替换原name字段
如果需要保留array2原对象的其他字段(比如id),可修改map回调:
const finalArray = array2.map(item => ({ ...item, ...extraFields, users: item.name, name: undefined // 显式删除原name字段 }));
内容的提问来源于stack exchange,提问作者Elham Bagheri
相关产品推荐
相关产品推荐

