JavaScript陣列中分組匹配元素
給定的問題陳述要求我們利用JavaScript功能在陣列中進行分組匹配元素。當我們談到對陣列元素進行分組時,通常使用reduce方法。
JavaScript中的reduce()函式是什麼?
讓我們瞭解一下JavaScript中reduce函式的工作原理。
在JavaScript中,內建方法reduce()用於迭代陣列的所有元素。此方法根據陣列的每個元素累積一個專案,它基本上接受兩個引數。第一個引數是累加器,第二個值是當前值。reduce函式針對陣列的每個元素呼叫,並給出累加器的新的值。
以下是JavaScript中定義reduce的語法:
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((accumulator, currentValue) => {
return accumulator + currentValue;
}, 0);
console.log(sum);
輸出
15
理解邏輯
程式碼接收輸入陣列arr,並將所有相同的項分組到一起。然後,它將返回一個數組陣列,其中每個內部陣列都保留陣列中所有重複元素的索引。
演算法
步驟1:首先,我們將建立一個包含一些重複值的陣列。
步驟2:現在,我們將對建立的陣列使用reduce函式來對元素進行分組。
步驟3:在第二步之後,在reducer函式中,我們將檢查陣列中的最後一項是否與當前元素相同。
步驟4:接下來,此步驟將識別如果最後一項與當前元素不相同,並將一個新的子陣列新增到子陣列陣列中。
步驟5:檢查上述條件後,將當前項推入子陣列陣列中的最後一個子陣列。
步驟6:現在顯示更新後的物件及其子陣列。
步驟7:現在訪問reducer函式返回的物件中的子陣列,然後將其賦值給變數groupedArray。
步驟8:使用groupedArray變數顯示輸出。
示例
// define array of containing some repeated items
const array = ['A','A','A','A','D','E','E','F','H','H','H','L','M','S','S','U','Y','Y'];
// create new array to make groups
const groupedArray = array.reduce((item, index) =>{
if (typeof item.last === 'undefined' || item.last !== index) {
item.last = index;
item.array.push([]);
}
item.array[item.array.length - 1].push(index);
return item;
}, {array: []}).array;
//console the output
console.log(groupedArray);
輸出
[
[ 'A', 'A', 'A', 'A' ],
[ 'D' ],
[ 'E', 'E' ],
[ 'F' ],
[ 'H', 'H', 'H' ],
[ 'L' ],
[ 'M' ],
[ 'S', 'S' ],
[ 'U' ],
[ 'Y', 'Y' ]
]
上面給出的程式碼是在閱讀問題陳述時想到的最直接的方法,但是如果您掌握了其背後的理論,您可以簡化並調整它,以最有效地利用時間和空間。
在上面的程式碼中,我們聲明瞭一個reduce函式,它接收累加器和當前元素作為輸入。然後我們一步一步地進行,首先檢查if語句並將結果推送到gourpedArray。最後,我們得到了子陣列的結果陣列。
在程式碼中,groupedArray物件用於儲存給定陣列['A','A','A','A','D','E','E','F','H','H','H','L','M','S','S','U','Y','Y']的結果子陣列。該函式將輸出作為陣列的相似元素的子陣列返回。
時間複雜度
時間複雜度:上述程式碼只執行一次,它在O(n)時間內迭代陣列的所有元素。然後,reducer函式的內迴圈每次迭代的複雜度為O(1)。這是因為我們正在分組專案,而沒有執行任何其他任務。因此,這段程式碼的總體時間複雜度將為O(n)。
空間複雜度:為了儲存子陣列,需要一個新陣列,因為我們只儲存對輸入元素的指標。因此,子陣列的大小將取決於給定的輸入資料。空間複雜度將為O(n)。
結論
這就是我們獲得上述問題陳述最終結果的方法。這是在JavaScript中對包含重複項的陣列進行分組重複元素的最簡單可靠的方法。它使用reduce方法迭代輸入陣列並建立匹配元素的子陣列。時間複雜度和空間複雜度都將為O(n)。
資料結構
網路
關係資料庫管理系統(RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP