假设我们有一个students对象,其中包含两个属性名称和标记。名称是对象的数组,每个对象具有两个属性名称和属性roll,类似地,marks是对象的数组,每个对象具有属性标记和属性roll。我们的任务是根据每个对象的适当滚动属性来组合标记和名称属性。
该学生对象在这里给出-
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是数组名称和标记的各自大小以及该O(1)的空间复杂度。但是,正在为标记数组的每个元素创建一个新属性。
这是完整的代码-
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' } ] }