不產生新的陣列,刪除數組裡的重複元素

陣列去重的方式有很多,我們可以使用 Set 去重、filter 過濾等,詳見

攜程&蘑菇街&bilibili:手寫陣列去重、扁平化函式

,但三種解法(Set、filter、reducer)都產生了新陣列:

MDN :

filter()

方法建立一個新陣列, 其包含透過所提供函式實現的測試的所有元素。

那麼我們如何在不產生性陣列的情況下刪除陣列中的重複元素喃?

方式一:排序去重

MDN:

sort()

方法用原地演算法對陣列的元素進行排序,並返回陣列。預設排序順序是在將元素轉換為字串,然後比較它們的UTF-16程式碼單元值序列時構建的

const

removeDuplicates = (nums) => {

// 原地排序

nums。sort()

// 去重

let

len =

1

for

let

i =

1

; i < nums。length; i++)

if

(nums[i] != nums[i

-1

]) nums[len++] = nums[i];

// 刪除重複項

nums。splice(len)

return

nums

}

// 測試

removeDuplicates([

1

2

3

1

3

])

// [1, 2, 3]

方式二:最佳化

const

removeDuplicates = (nums) => {

let

len = nums。length -

1

for

let

i = len; i>=

0

; i——) {

if

(nums。indexOf(nums[i]) != i) {

nums[i] = nums[len ——]

}

}

// 刪除重複項

nums。splice(len+

1

return

nums

}

// 測試

removeDuplicates([

1

2

3

1

3

])

// [1, 2, 3]

不產生新的陣列,刪除數組裡的重複元素

不產生新的陣列,刪除數組裡的重複元素