JavaScript如何将姓名、年龄数组封装为对应对象并整合为新数组
对应数组合并为对象数组的实现方案
这类按索引配对多源数组元素、组装为对象数组的任务,核心逻辑是保证取值时按相同索引对齐元素,常用的实现方式有以下几种:
全兼容的基础for循环实现
不受运行环境限制,适用于所有JS场景,遍历过程中以两个数组的最大长度为边界,避免短数组取值出现空值:const nameList = ["Jhon", "Mohammad", "Peter", "Harry"]; const ageList = ["21", "27", "35", "65"]; const arr = []; const maxLength = Math.max(nameList.length, ageList.length); for (let i = 0; i < maxLength; i++) { arr.push({ name: nameList[i], age: ageList[i] }) }简洁的Array.map实现
现代JS环境通用,代码量最少,直接遍历第一个数组,利用遍历回调拿到的索引值从第二个数组取对应元素组装对象:const arr = nameList.map((name, index) => ({ name, age: ageList[index] }))注意:该写法默认两个数组长度一致,如果存在长度差,会以nameList的长度为遍历边界,超出部分的ageList元素会被忽略,短索引位置会取到
undefined。可扩展的通用实现
适配后续需要合并更多字段的场景(比如新增职业、联系方式等数组字段),不需要修改核心遍历逻辑,只需要维护字段和源数组的映射关系即可:const fieldSourceMap = { name: nameList, age: ageList, // 后续新增字段直接在这里加映射,比如:job: jobList } // 计算所有源数组的最大长度作为遍历边界 const maxLength = Math.max(...Object.values(fieldSourceMap).map(item => item.length)); const arr = Array.from({ length: maxLength }, (_, index) => { return Object.fromEntries( Object.entries(fieldSourceMap).map(([fieldName, sourceArr]) => [fieldName, sourceArr[index]]) ) })
业务注意事项:实际开发中需要提前校验所有待合并数组的长度是否完全一致,避免出现值错位、字段为undefined的问题,不要直接默认两个数组的长度永远匹配。
内容的提问来源于stack exchange,提问作者Tural_Veli
相关产品推荐
相关产品推荐

