按唯一欄位合併物件屬性,然後列印資料 - JavaScript


假設我們有一個 students 物件,其中包含兩個屬性 names 和 marks。names 是一個物件陣列,每個物件都有 name 和 roll 兩個屬性,類似地,marks 是一個物件陣列,每個物件都有 mark 和 roll 屬性。我們的任務是根據每個物件的相應 roll 屬性合併 marks 和 names 屬性。

students 物件如下所示 −

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 是陣列 names 和 marks 的相應大小,並且此 O(1) 的空間複雜度。但是,正在為 marks 陣列的每個元素建立一個新屬性。

以下是完整程式碼 −

示例

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

更新於: 18-Aug-2020

105 次檢視

開啟您的 事業

完成課程獲得認證

開始
廣告