如何遍历含嵌套对象的JavaScript对象并交换指定对象属性值
遍历对象并交换指定课程属性值的实现方案
嘿,这里有几种清晰的方式来处理你的需求——遍历person对象、交换course1和course2的属性值,我会一步步给你演示:
一、遍历person对象的常用方法
遍历对象可以帮你查看所有课程的信息,这里分享两种实用的方式:
1. 使用for...in循环
这是最传统的遍历对象键名的方式,适合简单场景:
var person = { course1:{Name:"xxx", day:"mon", time:"2am-6pm"}, course2:{Name:"yyy", day:"tue", time:"7am-9pm"}, course3:{Name:"zzz", day:"tue", time:"2am-6pm"}, course4:{Name:"aaa", day:"wed", time:"2am-6pm"}, course5:{Name:"bbb", day:"thu", time:"2am-6pm"}, course6:{Name:"ccc", day:"mon", time:"2am-6pm"} }; // 遍历所有课程键名 for (let courseKey in person) { // 跳过原型链上的属性(可选,更严谨) if (person.hasOwnProperty(courseKey)) { const course = person[courseKey]; console.log(`${courseKey}: 课程名${course.Name},时间${course.day} ${course.time}`); } }
2. 使用Object.entries()遍历键值对
这种方式可以直接拿到每个课程的键名和对应对象,代码更直观:
// 遍历键值对 for (const [courseKey, course] of Object.entries(person)) { console.log(`${courseKey}: 课程名${course.Name},时间${course.day} ${course.time}`); }
二、交换course1与course2的属性值
交换属性时要注意:不能直接互相赋值,否则会覆盖原有数据,需要借助临时变量或者ES6的解构赋值来实现:
1. 临时变量法(兼容所有ES版本)
// 保存course1的所有属性到临时变量 const tempCourse = { ...person.course1 }; // 把course2的属性赋值给course1 person.course1.Name = person.course2.Name; person.course1.day = person.course2.day; person.course1.time = person.course2.time; // 把临时变量的属性赋值给course2 person.course2.Name = tempCourse.Name; person.course2.day = tempCourse.day; person.course2.time = tempCourse.time; // 验证结果 console.log("交换后的course1:", person.course1); console.log("交换后的course2:", person.course2);
2. ES6解构赋值法(更简洁)
如果你的环境支持ES6+,可以用解构一步完成交换,代码更优雅:
// 直接解构交换两个课程对象的属性 [person.course1, person.course2] = [person.course2, person.course1]; // 验证结果 console.log("交换后的course1:", person.course1); console.log("交换后的course2:", person.course2);
注意:这种方式是直接交换整个对象的引用,如果你的业务只需要交换部分属性,可以针对性解构,比如
[person.course1.Name, person.course2.Name] = [person.course2.Name, person.course1.Name],同理处理day和time。
三、完整操作示例
把遍历和交换结合起来,你可以先遍历查看初始状态,交换后再遍历验证结果:
var person = { course1:{Name:"xxx", day:"mon", time:"2am-6pm"}, course2:{Name:"yyy", day:"tue", time:"7am-9pm"}, course3:{Name:"zzz", day:"tue", time:"2am-6pm"}, course4:{Name:"aaa", day:"wed", time:"2am-6pm"}, course5:{Name:"bbb", day:"thu", time:"2am-6pm"}, course6:{Name:"ccc", day:"mon", time:"2am-6pm"} }; console.log("=== 初始课程列表 ==="); for (const [key, course] of Object.entries(person)) { console.log(`${key}: ${course.Name} | ${course.day} | ${course.time}`); } // 交换course1和course2 [person.course1, person.course2] = [person.course2, person.course1]; console.log("\n=== 交换后的课程列表 ==="); for (const [key, course] of Object.entries(person)) { console.log(`${key}: ${course.Name} | ${course.day} | ${course.time}`); }
内容的提问来源于stack exchange,提问作者Cute_kittens
相关产品推荐
相关产品推荐

