陣列去重的優化

2021-07-26 17:25:03 字數 1886 閱讀 9270

使用php的array_unique()函式允許你傳遞乙個陣列,然後移除重複的值,返回乙個擁有唯一值的陣列。這個函式大多數情況下都能工作得很好。但是,如果你嘗試在乙個大的陣列裡使用array_unique()函式,它會執行地慢一些。

有乙個比較好而且更快的函式array_flip()來替代使用array_unique()函式來建立唯一的陣列。這個魔法般的函式會交換陣列裡面每乙個元素的鍵和值,因為鍵值必須唯一,因此,你會得到跟array_unique()函式一樣的結果。

/* 建立乙個包含重複值的,一共四個元素的陣列 */

$array

=array

('green'

,'blue'

,'orange'

,'blue'

);

/* 翻轉陣列,你將會得到唯一鍵值的陣列

array(

'green'

=>0,

'blue'

=>1,

'orange'

=>

2); */

$array

=array_flip

($array

);

/* 然後再翻轉一次,將鍵和值重新放置,然後得到陣列:array(

0=>

'green',1

=>

'blue',2

=>

'orange'

); */

$array

=array_flip

($array

);

因為我們已經移除了一些元素,因此陣列看起來不是正常的序列。比如我們可能會得到:array(0=>'a',2=>'b',5=>'c');。在某些情況下,這不是乙個問題,但是如果你需要陣列的鍵值保持數字的序列,你可以使用一到兩種方法解決鍵值亂序的問題。

新增array_flip之後的函式,將會對陣列的鍵值排序並且讓它們恢復到正常的序列,如:0,1,2,3...

$array

=array

('green'

,'blue'

,'orange'

,'blue'

);$array

=array_flip

($array

);$array

=array_flip

($array

);/* 使用array_merge()函式修復鍵值*/

$array

=array_merge

($array

);

注意,這種修復陣列鍵值的方法比使用array_merge()函式稍微快了一點。你也可以在最後一步結合使用array_keys()函式(此函式返回翻轉後的值)。然後當你翻轉陣列的值,鍵值就會根據順序建立。

$array

=array

('green'

,'blue'

,'orange'

,'blue'

);$array

=array_flip

($array

);/* 跟第乙個例子一樣,但是現在我們先提取陣列的鍵值 */

$array

=array_keys

($array

);

非常簡單,比起在大陣列使用array_unique函式,有了乙個有效的效能提公升。

陣列的去重

陣列去重 1 var arr 4,2,5,7,2,6,2,6,6,5 console.log arr 使用迴圈依次比較,遇到重複的就刪除 比較length 1趟 for var i 0 i arr.length 1 i console.log arr 2 var arr 4,2,4,5,7,2,6,...

JS陣列去重,物件去重

例項1根據indexof去重,indexof的好處就是返回的是首次出現的位置,這樣後面即使出現的值一樣,也只能返回第一次出現的索引,當然這個只適用於簡單的陣列 物件陣列去重 const objarr const obj const newobjarr for let i 0 i objarr.len...

js陣列去重以及陣列內物件去重

大家在寫專案的時候一定遇到過這種邏輯需求,就是給乙個陣列進行去重處理,還有一種就是給陣列內的物件根據某乙個屬性,比如id,進行去重,下面我寫了兩個函式,都是可以達到這個效果的,乙個是純es5的去重辦法,乙個是用了es6的array.from new set 和es5的reduce來進行去重 我先定義...