Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

고유 필드를 통해 개체 속성 병합 후 데이터 인쇄 - JavaScript

<시간/>

두 개의 속성 이름과 표시를 포함하는 학생 개체가 있다고 가정해 보겠습니다. 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' }
   ]
}