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)。

更新於:2023年8月23日

259 次瀏覽

啟動您的職業生涯

完成課程後獲得認證

開始
廣告
© . All rights reserved.