JavaScript如何将奇偶交替的日程数组转换为指定结构的对象数组
问题分析
- 赋值逻辑错误:代码中直接把循环索引
i赋值给day和exercise属性,没有从原数组WorkList1中读取对应位置的实际值。 - 对象引用问题:仅在循环外部声明了一次
object对象,JS中对象为引用类型,每次修改都是操作同一个内存地址的对象,最终数组中所有元素都会指向同一个对象,值为最后一次修改的结果。 - 推入时机错误:每遍历1个元素就执行一次
push操作,最终生成的数组长度为6,不符合预期的3个对象的结构,应该每处理完一组「日期+运动」的配对后再推入结果数组。
正确实现方案
两种方案运行后都可以得到预期的目标数组结构:
方案1:基础for循环(贴合原有写法思路)
const WorkList1 = ["Monday", "running", "Tuesday", "swimming", "Wednesday", "riding"]; const WorkList2 = []; // 每次步长设为2,直接遍历每个day的位置 for (let i = 0; i < WorkList1.length; i += 2) { // 每次循环内部新建对象,避免引用问题 const object = { day: WorkList1[i], exercise: WorkList1[i + 1] }; WorkList2.push(object); }
方案2:简洁写法(利用Array.from批量生成)
const WorkList1 = ["Monday", "running", "Tuesday", "swimming", "Wednesday", "riding"]; const WorkList2 = Array.from({ length: WorkList1.length / 2 }, (_, index) => ({ day: WorkList1[index * 2], exercise: WorkList1[index * 2 + 1] }));
内容的提问来源于stack exchange,提问作者LuAnBoy
相关产品推荐
相关产品推荐

