假设我们有一个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' }
]
}