2017-04-20 36 views
2

我有一個數組['2530491','2530491','2530491','2530492']2530491被三次複製,我想從他們的3除去2530491單個值,所以輸出會是這樣: ['2530491','2530491','2530492']的Javascript:如何從數組重複刪除只有一個值值

fileArrayAnnounce_size = jQuery.grep(fileArrayAnnounce_size, function(value){ 
    return value != file_size.metas[0].size; 
}); 

我試着握住它,但是它刪除了所有相同的值。我想從副本中只刪除一個值。

+0

http://stackoverflow.com/questions/18008025/remove-duplicate-item-from-array-javascript – user2211290

+0

什麼是完全規則....允許2次重複,但沒有更多? – charlietfl

+0

@charlietfl似乎是這種情況。兩次,但不是三次。 – evolutionxbox

回答

2

您可以檢查是否給定的元素有欺騙元素或沒有,如果有的話 - 刪除原始數組指定元素只是一個重複的條目。

var arr = ['2530491','2530491','2530491','2530492'], 
 
    hash = [...new Set(arr)]; 
 
    hash.forEach((v,i) => arr.indexOf(v) != arr.lastIndexOf(v) ? arr.splice(arr.indexOf(v), 1) : null); 
 
    
 
    console.log(arr);

+0

我喜歡簡單 –

3

您可以使用spliceindexOf以撤銷了一審:

fileArrayAnnounce_size.splice(fileArrayAnnounce_size.indexOf('2530491'), 1) 

一個更安全的方式:

var index = fileArrayAnnounce_size.indexOf('2530491') 
if (index > -1) { 
    fileArrayAnnounce_size.splice(index, 1); 
} 

檢查並刪除重複:

var mapOfValues = fileArrayAnnounce_size.reduce(function(vals, current) { 
    if (vals[current]) { 
     vals[current]++; 
    } else { 
     vals[current] = 1; 
    } 

    return vals; 
}, {}); 

現在檢查和刪除超過1個值的任何東西:

for (var value in mapOfValues) { 
    if (mapOfValues[value] > 1) { 
     var idx = fileArrayAnnounce_size.indexOf(value); 
     fileArrayAnnounce_size.splice(idx, 1); 
    } 
} 

演示:https://jsfiddle.net/1277mxt9/

+0

難道你還需要檢查一個值是否有重複?否則所有值將被刪除。 – evolutionxbox

+2

看不到這是如何驗證重複存在 – charlietfl

+0

我的意思是,這隻適用於你知道重複值的情況。 – George

1

您可以使用filter()並傳遞一個對象作爲參數thisArg使用它作爲哈希表。

var data = ['2530491','2530491','2530491','2530492', '2530492']; 
 

 
var result = data.filter(function(e) { 
 
    if(!this[e]) this[e] = 1 
 
    else if (this[e] == 1) return this[e] = 2, false 
 
    return true; 
 
}, {}) 
 

 
console.log(result)