JavaScript 中合併子陣列
此問題要求使用 JavaScript 概念合併子陣列。我們將在此問題中使用電子郵件資料。此外,我們將合併具有相同名稱的人員的電子郵件。
理解問題
為了解決任何給定的陳述,我們首先需要深入理解問題。這個問題將被分解成子問題。因此,解決這個問題將變得容易。考慮解決問題必須遵循的任何重要程式或步驟。
為了解決這個問題,我們必須根據其匹配的名稱組織電子郵件地址。這可以透過迭代輸入陣列並在使用對映來儲存每個名稱的電子郵件地址的同時來完成。
演算法
步驟 1 − 宣告一個名為 mergeSubArray 的函式,該函式將陣列元素作為輸入。此函式將在返回新陣列之前對陣列中所有人員的電子郵件地址進行分組。
步驟 2 − 宣告最終的 emailData 陣列,其中輸入陣列中存在的元素的所有組具有不同的組合。目前,將其宣告為一個空陣列。'Set' 將在此階段用於儲存電子郵件地址,因為它消除了重複資料
步驟 3 − 迴圈遍歷輸入陣列中的每個元素。在此階段,將刪除當前元素中人員的姓名和電子郵件。如果它不是當前名稱的一個,則建立一個包含電子郵件的新批次並將其新增到 emailData 中。
步驟 4 − 將每個電子郵件地址新增到現在位於 emailData 中的名稱的 Set 中。
步驟 5 − 迴圈遍歷 emailData 後,將建立一個名為 showResult 的新陣列,它將包含已排序的電子郵件地址。
步驟 6 − 因此,我們已根據其名稱對電子郵件進行了排序,並將結果放入結果陣列中
步驟 7 − 這就是子陣列的分組和合並以提供結果陣列的方式。
示例
//create an array with name and email
const arr = [ ["Ayaan", "ayaanshri@email.com", "ayaan00@email.com"],
["Maahi", "maahibhatt@email.com"],
["Ayaan", "ayaansss@email.com", "ayaan_nepal@email.com"],
["Maahi", "maahi@email.com"]
];
//define function mergeSubArray
function mergeSubArray(arr) {
const emailData = {};
for (let i = 0; i < arr.length; i++) {
const name = arr[i][0];
const mail = arr[i].slice(1);
if (!emailData.hasOwnProperty(name)) {
emailData[name] = new Set(mail);
} else {
mail.forEach(email => emailData[name].add(email));
}
}
const showResult = [];
for (const [name, mail] of Object.entries(emailData)) {
showResult.push([name, ...[...mail].sort()]);
}
return showResult;
}
console.log(mergeSubArray(arr));
輸出
[
[
'Ayaan',
'ayaan00@email.com',
'ayaan_nepal@email.com',
'ayaanshri@email.com',
'ayaansss@email.com'
],
[ 'Maahi', 'maahi@email.com', 'maahibhatt@email.com' ]
]
時間和空間複雜度
mergeSubArray() 函式具有 O(n log n) 的時間複雜度,其中 n 表示輸入陣列中電子郵件的總數。這是因為該函式對電子郵件地址進行排序並使用 Set 來檢查重複項,這兩者都具有 O(n log n) 的最壞情況時間複雜度。在最壞情況下,迴圈遍歷 emailData 具有 O(n) 的時間複雜度,其中 n 是輸入陣列中不同名稱的總數。
該函式的空間複雜度為 O(n),其中 n 是輸入陣列中電子郵件的總數。這是因為函式建立的雜湊表可以為輸入陣列中的每個唯一名稱建立一個條目。雜湊表中的每個條目都包含一個最多包含 n 個電子郵件地址的 Set。
結論
我們透過使用對映來儲存每個名稱的所有電子郵件地址來做到這一點。後續過程的時間複雜度和空間複雜度由輸入陣列中電子郵件的總數(用整數 n 表示)決定。
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP