4 回答

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
更新了ES6 / ES2015的答案:使用Set,單行解決方案是:
var items = [4,5,4,6,3,4,5,2,23,1,4,4,4]var uniqueItems = Array.from(new Set(items))
哪個(gè)回報(bào)
[4, 5, 6, 3, 2, 23, 1]
正如le_m建議的那樣,這也可以使用spread運(yùn)算符縮短,比如
var uniqueItems = [...new Set(items)]

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個(gè)贊
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貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊
我后來發(fā)現(xiàn)了一個(gè)使用jQuery的好方法
arr = $.grep(arr, function(v, k){ return $.inArray(v ,arr) === k;});

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