2016-10-29 68 views
-3

例如,來自陣列如何在Javascript中刪除數組中所有出現的多個元素?

[1, 2, 3, 2, 4] 

除去值2應產生結果

[1, 3, 4] 

如果使用過濾器,只去除第二和隨後的發生,這是不我想要的。

多次出現的所有值應該完全刪除。

+2

你說你想刪除多個錯誤,但後來說去除多個職位rrences是「不是我想要的」...? – Utkanos

+0

我想刪除一個數組中的多個發生變量的所有實例 – anonymous

回答

1

如果您之前排序數組您就在這時,需要刪除元素是一樣的neighbourg:

var input = [1, 2, 3, 2, 4, 5, 6, 5 , 5, 1]; 
var result = input.sort().filter((x,i,arr) => x !== arr[i+1] && x !== arr[i-1])); 
console.log(result); // [3, 4, 6 ] 
+0

但他想要刪除所有**兩個(和五個)。 –

+0

@torazaburo感謝您的hawkeyes。我剛編輯修復了這個錯誤 –

2

你可以用filter()做到這一點,只返回具有相同indexOf()lastIndexOf()

元素

var data = [1, 2, 3, 2, 4, 1, 1]; 
 

 
var result = data.filter(function(e) { 
 
    return data.indexOf(e) == data.lastIndexOf(e); 
 
}); 
 

 
console.log(result)

0

的提案機智排序。

var data = [1, 2, 3, 2, 4], 
 
    filtered = data.filter(function (a) { 
 
     return this[a] === 1; 
 
    }, data.reduce(function (r, a) { 
 
     r[a] = (r[a] || 0) + 1; 
 
     return r; 
 
    }, {})); 
 

 
console.log(filtered);

0

最簡單的解決方案可能只是爲了讓地圖上多次出現的任何找到的項目,並始終刪除那些在過濾器

var arr = [1, 2, 3, 2, 4]; 
 
var map = []; 
 

 
var filtered = arr.filter(function(item, index) { 
 
    if (arr.lastIndexOf(item) !== index) map.push(item); 
 
    return map.indexOf(item) === -1; 
 
}); 
 

 
console.log(filtered)

相關問題