如何基于新属性拆分含多科目成绩的JavaScript对象
按科目拆分对象的实现方法
需求说明
将包含多科目分数的单个对象拆分为多个对象,每个对象仅保留一个科目及其对应分数,新增Subject字段标记科目,分数统一用Marks字段存储。
原始数据示例
let x = { 'Name': 'Ajay', 'Maths': 0, 'English': 26, }
期望输出
let y = [{ 'Name' : 'Ajay', 'Marks' : 0, 'Subject' : 'Maths' },{ 'Name' : 'Ajay', 'Marks' : 26, 'Subject' : 'English' }]
实现方案
核心逻辑是遍历对象的键名,跳过Name字段后,为每个科目单独创建新对象并收集到结果数组中。
完善后的遍历实现
你当前的遍历思路是可行的,但需要补充结果数组的初始化和对象收集逻辑,完整代码如下:
let x = { 'Name': 'Ajay', 'Maths': 0, 'English': 26, }; let y = []; // 初始化结果数组 for (let key of Object.keys(x)) { if (key === "Name") { continue; } // 为每个科目创建新对象并推入结果数组 y.push({ Name: x.Name, Subject: key, Marks: x[key] }); } console.log(y); // 输出目标数组结构
更简洁的函数式写法(可选)
可以结合Object.entries、filter和map实现,代码更简洁直观:
let x = { 'Name': 'Ajay', 'Maths': 0, 'English': 26, }; let y = Object.entries(x) .filter(([key]) => key !== 'Name') // 过滤掉Name字段 .map(([subject, marks]) => ({ Name: x.Name, Subject: subject, Marks: marks })); console.log(y);
内容的提问来源于stack exchange,提问作者Prajay P
相关产品推荐
相关产品推荐

