获取JavaScript数组中的所有唯一值(删除重复项)

获取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;}


凤凰求蛊
浏览 1813回答 4
4回答

斯蒂芬大帝

更新了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深度文章
打开App,查看更多内容
随时随地看视频慕课网APP