You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历含嵌套对象的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:29:55