Computer >> Máy Tính >  >> Lập trình >> Javascript

Hợp nhất các thuộc tính đối tượng thông qua trường duy nhất rồi in dữ liệu - JavaScript

Giả sử chúng ta có một đối tượng sinh viên chứa hai tên thuộc tính và dấu. Tên là một mảng đối tượng với mỗi đối tượng có hai thuộc tính tên và cuộn, các nhãn tương tự là một mảng đối tượng với mỗi đối tượng có dấu và cuộn thuộc tính. Nhiệm vụ của chúng ta là kết hợp các dấu hiệu và tên các thuộc tính theo thuộc tính cuộn thích hợp của từng đối tượng.

Các học sinh đối tượng được đưa ra ở đây -

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
}]
}

Hãy xác định một hàm kết hợp Các đặc tính nhận đối tượng sinh viên và kết hợp các đặc tính tại chỗ, tức là không sử dụng thêm bất kỳ khoảng trống nào -

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);

Độ phức tạp thời gian của mã này là O (mn) trong đó m và n là kích thước tương ứng của tên và dấu mảng và độ phức tạp không gian của O (1) này. Tuy nhiên, một thuộc tính mới đang được tạo để tách mảng dấu.

Đây là mã hoàn chỉnh -

Ví dụ

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);

Đầu ra

Đầu ra của bảng điều khiển sẽ là -

{
   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' }
   ]
}