2017-02-20 76 views
1

我正嘗試在JavaScript中刪除數組中的重複項。給定的數組是在JavaScript中刪除數組中的重複項

array = [1,1,1,1,1,1,1,1,1,,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,1,1,1,1,1,2,2,2,2,2,2,2,2]

resultant_array = [1,2,3,1,2]

這裏第二個1不被認爲是一個重複的

OR

array = [1,1,1,1,1,1,1,1,1,1,1,1]

resultant_array = [1]

任何想法如何,我可以做到這一點

+0

[Lodash'uniq'](https://lodash.com/docs/#uniq)? – tadman

+0

你想做什麼?刪除重複項當且僅當它們是連續的? 「22」發生了什麼?你試過什麼了? –

+0

所以你想刪除連續的重複? replace(/((?:^ |,)([^,] +))(,\ 2(?=,| $))+/g,「$ 1」 ).split(「,」);' –

回答

1

您可以使用reduce這樣的:

var array = [1,1,1,1,1,1,1,1,1,,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,1,1,1,1,1,2,2,2,2,2,2,22]; 
 

 
var result = array.reduce(function(r, e) { 
 
    if(r[r.length - 1] != e) // if the last element in the result is not equal to this item, then push it (note: if r is empty then r[-1] will be undefined so the item will be pushed as any number is != undefined) 
 
    r.push(e); 
 
    return r; 
 
}, []); 
 

 
console.log(result);

1
var arr = [1,1,2,2,3,3]; 
var obj = {}; 
for(var i in arr) { 
    obj[arr[i]] = true; 
} 
var result = []; 
for(var i in obj) { 
    result.push(i); 
} 

我設置對象的鍵作爲陣列的價值和不能有多個具有相同值的鍵。然後我把所有的鑰匙放在結果中。

+0

這將在所有情況下給我[1,2,3] ...即使我通過[1,1,2,2,3,3,1,1,2,2,3,3]。在這種情況下,我需要[1,2,3,1,2,3] – Mahima

+0

這可能沒有回答OP的問題,但它確實回答了我的問題。謝謝! –

1

你可以檢查的前身與Array#reduce

var array = [1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2], 
 
    result = array.reduce(function (r, a) { 
 
     return r[r.length - 1] === a ? r : r.concat(a); 
 
    }, []); 
 
    
 
console.log(result);

或使用Array#filter和最後一個值的對象。

var array = [1, 1, 1, 1, 1, 1, 1, 1, 1, , 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2], 
 
    result = array.filter(function (a, i, aa) { 
 
     return this.last !== a && (this.last = a, true); 
 
    }, { last: undefined }); 
 
    
 
console.log(result);

+0

謝謝。那22是一個錯字。我糾正了它。你能告訴我這是如何工作的嗎? – Mahima

+0

'concat'似乎有點消耗資源,因爲它每次都會創建一個新的數組! –

+0

@ibrahimmahrir,你可以使用過濾器... –