鳳凰求蠱
2019-05-23 14:38:36
獲取JavaScript數組中的所有唯一值(刪除重復項)我有一系列數字,我需要確保它們是唯一的。我在互聯網上找到了下面的代碼片段,它的工作情況很好,直到數組中的數字為零。我發現這個其他腳本在SO上看起來幾乎就像它,但它不會失敗。所以為了幫助我學習,有人可以幫我確定原型腳本出錯的地方嗎?Array.prototype.getUnique = function() {
var o = {}, a = [], i, e;
for (i = 0; e = this[i]; i++) {o[e] = 1};
for (e in o) {a.push (e)};
return a;}
4 回答

慕桂英546537
TA貢獻1848條經驗 獲得超10個贊
One Liner,Pure JavaScript
使用ES6語法
list = list.filter((x, i, a) => a.indexOf(x) == i)
x --> item in array i --> index of item a --> array reference, (in this case "list")
使用ES5語法
list = list.filter(function (x, i, a) { return a.indexOf(x) == i; });
瀏覽器兼容性:IE9 +

慕森卡
TA貢獻1806條經驗 獲得超8個贊
我后來發現了一個使用jQuery的好方法
arr = $.grep(arr, function(v, k){ return $.inArray(v ,arr) === k;});

FFIVE
TA貢獻1797條經驗 獲得超6個贊
ES6的最短解決方案: [...new Set( [1, 1, 2] )];
或者,如果要修改Array原型(如原始問題中所示):
Array.prototype.getUnique = function() { return [...new Set( [this] )];};
EcmaScript 6目前僅在現代瀏覽器中部分實現(2015年8月),但是Babel已經變得非常流行,可以將ES6(甚至是ES7)轉換回ES5。那樣你今天就可以編寫ES6代碼了!
如果你想知道...
它意味著什么,它就叫做傳播算子。來自MDN:?擴展運算符允許在需要多個參數(用于函數調用)或多個元素(用于數組文字)的地方擴展表達式?。因為Set是可迭代的(并且只能具有唯一值),所以擴展運算符將展開Set以填充數組。
學習ES6的資源:
添加回答
舉報
0/150
提交
取消