为了账号安全,请及时绑定邮箱和手机立即绑定

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

获取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;}
查看完整描述

4 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

更新了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)]


查看完整回答
反对 回复 2019-05-23
?
慕桂英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 +


查看完整回答
反对 回复 2019-05-23
?
慕森卡

TA贡献1806条经验 获得超8个赞

我后来发现了一个使用jQuery的好方法

arr = $.grep(arr, function(v, k){
    return $.inArray(v ,arr) === k;});


查看完整回答
反对 回复 2019-05-23
?
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的资源:


查看完整回答
反对 回复 2019-05-23
  • 4 回答
  • 0 关注
  • 1762 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信