Cho đối tượng students chứa hai thuộc tính names và marks. names là mảng đối tượng có name và roll, marks là mảng đối tượng có mark và roll. Nhiệm vụ: gộp marks và names theo roll phù hợp.
Đối tượng 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 }] }Định nghĩa hàm combineProperties gộp thuộc tính tại chỗ (in-place):
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 O(mn), không gian O(1). Tạo thuộc tính mới cho mỗi phần tử của mảng marks.
Ví dụ hoàn chỉnh
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);Kết quả
Đầu ra console:
{ 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' } ] }