두 개의 속성 이름과 표시를 포함하는 학생 개체가 있다고 가정해 보겠습니다. namesis는 두 개의 속성 name과 roll을 가진 각 객체가 있는 객체의 배열이며, 유사하게 mark는 각 객체에 mark와 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를 정의해 보겠습니다. −
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' } ] }