按唯一欄位合併物件屬性,然後列印資料 - 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' } ] }
廣告