按唯一字段合并对象属性,然后打印数据 - JavaScript
假设我们有一个 students 对象,其中包含两个属性 names 和 marks。names 是一个对象数组,每个对象都有 name 和 roll 两个属性,类似地,marks 是一个对象数组,每个对象都有 mark 和 roll 属性。我们的任务是根据每个对象的相应 roll 属性合并 marks 和 names 属性。
students 对象如下所示 −
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 函数,该函数接收 students 对象并就地合并属性,即不使用任何额外空间 −
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' } ] }
广告