获取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
提交
取消