-
斯蒂芬大帝
更新了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))哪个回报[4, 5, 6, 3, 2, 23, 1]正如le_m建议的那样,这也可以使用spread运算符缩短,比如var uniqueItems = [...new Set(items)]
-
慕桂英546537
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 +
-
慕森卡
我后来发现了一个使用jQuery的好方法arr = $.grep(arr, function(v, k){
return $.inArray(v ,arr) === k;});
-
FFIVE
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的资源:由Axel Rauschmayer博士探索ES6从JS每周通讯中搜索“ES6”来自Mozilla Hacks博客的ES6深度文章