通过唯一字段合并对象属性然后打印数据 - JavaScript

javascriptweb developmentobject oriented programming更新于 2025/9/25 9:48:17

假设我们有一个学生对象,包含两个属性:姓名和分数。姓名是一个对象数组,每个对象都有两个属性:姓名和分数,类似地,分数也是一个对象数组,每个对象都有属性:分数和分数。我们的任务是根据每个对象的相应分数属性组合分数和姓名属性。

这里给出了学生对象 −

const students = {
   marks: [{
      roll: 123,
      mark: 89
   }, {
      roll: 143,
      mark: 69
   }, {
      roll: 126,
      mark: 91
   }, {
      roll: 112,
      mark: 80
   }],
names: [{
   name: 'Aashish',
   roll: 126
}, {
   name: 'Sourav',
   roll: 112
}, {
   name: 'Vineet',
   roll: 143
}, {
   name: 'Kartik',
   roll: 123
}]
}

让我们定义一个函数 CombineProperties,它接受学生对象并就地组合属性,即不使用任何额外空间 −

const CombineProperties = (students) => {
   const { marks, names } = students;
   marks.forEach(marksObj => {
      const { roll } = marksObj;
      marksObj.name = names.find(namesObj => namesObj.roll ===roll).name;
   })
   delete students['names'];
};
CombineProperties(students);
Console.log(students);

此代码的时间复杂度为 O(mn),其中 m 和 n 分别是数组 names 和 marks 的大小,空间复杂度为 O(1)。但是,marks 数组的每个元素都会创建一个新属性。

以下是完整代码 −

示例

const students = {
   marks: [{
      roll: 123,
      mark: 89
   }, {
      roll: 143,
      mark: 69
   }, {
      roll: 126,
      mark: 91
   }, {
      roll: 112,
      mark: 80
   }],
   names: [{
      name: 'Aashish',
      roll: 126
   }, {
      name: 'Sourav',
      roll: 112
   }, {
      name: 'Vineet',
      roll: 143
   }, {
      name: 'Kartik',
      roll: 123
   }]
}
const combineProperties = (students) => {
   const { marks, names } = students;
   marks.forEach(marksObj => {
      const { roll } = marksObj;
      marksObj.name = names.find(namesObj => namesObj.roll ===roll).name;
   })
   delete students['names'];
};
combineProperties(students);
console.log(students);

输出

控制台输出将是 −

{
   marks: [
      { roll: 123, mark: 89, name: 'Kartik' },{ roll: 143, mark: 69, name: 'Vineet' },
      { roll: 126, mark: 91, name: 'Aashish' },{ roll: 112, mark: 80, name: 'Sourav' }
   ]
}

相关文章


有用资源