1
1891
用
JavaScript 1.6
/
ECMAScript 5
你可以用本地的
本机方法
此解决方案不需要任何额外的库(如jquery或prototype.js)即可工作。 它也适用于混合值类型的数组。
对于不支持本机方法的旧浏览器(<ie9)
如果要保留值的最后一次出现,只需替换
使用ES6,可以缩短为:
多亏了 Camilo Martin 以获取注释中的提示。
ES6具有本机对象
的建设者
|
2
643
更新了ES6/ES2015的答案 使用 Set ,单线解决方案为:
哪些回报
AS le_m 建议,也可以使用 spread operator ,就像
|
3
126
您也可以使用 underscore.js .
将返回:
|
5
52
一行,纯javascript使用ES6语法
|
6
50
从那以后,我发现了一个使用jquery的好方法
注意:此代码是从 Paul Irish's duck punching post -我忘记给学分了:P |
7
45
ES6最短解决方案:
或者,如果要修改数组原型(如原始问题):
ECMAScript 6仅 partially implemented 在当前的现代浏览器中(2015年8月),但是 Babel 已经成为非常流行的发泄ES6(甚至ES7)回到ES5。这样,您就可以在今天编写ES6代码了!
如果你想知道
学习ES6的资源:
|
8
32
最简单的解决方案:
或:
|
9
30
最简单的,和 fastest (铬)这样做的方式:
只需遍历数组中的每个项,测试该项是否已经在列表中,如果没有,则推送到返回的数组。 根据jspef,此函数是 the fastest of the ones I could find anywhere -尽管如此,请随意添加您自己的。 非原型版本:
分选当还需要对数组进行排序时,以下是最快的:
或非原型:
这也是 faster than the above method 在大多数非Chrome浏览器中。 |
10
28
仅限表演!这个代码可能比这里所有代码快10倍 *适用于所有浏览器,并且内存影响最小…. 还有更多 如果不需要重用旧数组,那么在将其转换为唯一数组之前,顺便做一些必要的其他操作,这可能是最快的方法,也非常短。
那你可以试试这个
我在阅读这篇文章时想到了这个函数… http://www.shamasis.net/2009/09/fast-algorithm-to-find-unique-items-in-javascript-array/ 我不喜欢for循环。它有很多参数,我喜欢while循环。 在所有浏览器中,除了我们都非常喜欢的浏览器外,它是最快的循环…铬。
不管怎样,我编写了第一个使用while的函数。是的,它比本文中的函数快一点,但还不够。
下一步使用现代JS。
在这一点上,我在思考我的独特功能到底需要什么。
我不需要旧的数组,我想要一个快速函数。
所以我用了2个while循环+拼接。
没必要说我印象深刻。 铬: 通常每秒150000次操作跃升到每秒1800000次操作。 IE: 80000次/秒vs 3500000次/秒 网间网操作系统: 18000 op/s对170000 op/s 游猎: 80000次/秒vs 6000000次/秒 证明 http://jsperf.com/wgu 或者最好使用控制台。时间…微时间…无论什么
不要使用
注意:在执行此操作后,旧数组将被销毁/成为唯一数组。 如果你不能阅读上面的代码,请阅读一本javascript书籍,或者这里有一些关于较短代码的解释。 https://stackoverflow.com/a/21353032/2450730
一些正在使用
对于空数组
|
11
24
这里的许多答案可能对初学者没有用处。如果一个数组的重复数据消除很困难,他们真的知道原型链,甚至jquery吗? 在现代浏览器中,一个干净而简单的解决方案是将数据存储在 Set ,设计为唯一值列表。
这个
如果您需要支持旧的Internet Explorer,因而不能使用set,那么一种简单的技术是将项目复制到新的数组中,同时预先检查它们是否已经在新的数组中。
为了使这个可以立即重用,让我们把它放到一个函数中。
为了消除重复,我们现在就这么做。
这个
只要把你喜欢的数组的名字传给它。 |
12
19
|
13
17
这个原型
以下是正确的解决方案:
使用:
以上将产生
|
14
12
如果不扩展array.prototype(据说这是一个糟糕的实践)或使用jquery/underline,您只需
通过保留最后一个事件:
或第一次出现:
好吧,它只是JavaScriptECMAScript 5+,这意味着只有IE9+,但它很适合在原生HTML/JS(Windows应用商店应用程序、Firefox OS、Sencha、PhoneGap、Titanium…)中进行开发。 |
15
12
我们可以使用ES6设置:
//输出将为
|
16
10
那是因为
|
17
10
如果您使用的是原型框架,那么不需要执行“for”循环,您可以使用 http://www.prototypejs.org/api/array/uniq 这样地:
它将生成一个没有重复项的重复数组。我发现你的问题是在寻找一种方法来计算不同的数组记录,所以
我用过
这是我的简单结果。 对不起,如果我打错了什么 编辑:如果要转义未定义的记录,可以添加
之前,像这样:
|
18
9
|
19
6
我不知道为什么加布里埃尔·席尔维拉这样写这个函数,但是一个简单的形式,对我来说也同样有效,没有缩小是:
或在咖啡中描述:
|
20
6
在简单方法中查找唯一数组值
|
21
6
奇怪的是,以前没有人建议过……按对象键删除重复项(
|
22
6
魔术
o(n)
performance
;我们假设您的数组在
|
23
5
从 Shamasis Bhattacharya 's blog (o(2n)时间复杂性):
从
Paul Irish
's blog
:jquery的改进
|
24
5
相反地,为了解决这个问题,在加载数组时不重复可能很有用,方法是 Set 对象将执行此操作,但它在所有浏览器中都不可用。它节省了内存,如果您需要多次查看其内容,它会更高效。
Sample:
给你
|
25
3
|
26
3
我发现序列化散列键有助于我为对象工作。
|
27
3
您也可以使用 sugar.js:
|
28
3
如果您对额外的依赖关系还满意,或者您的代码库中已经有了一个库,那么您可以使用lodash(或下划线)从一个数组中删除重复项。 用法 如果您的代码库中没有它,请使用NPM安装它:
然后如下使用:
出:
|
29
3
基于ES6的解决方案…
|
30
2
也可以使用jquery
最初回答时间: jQuery function to get all unique elements from an array? |
Toniq · javascript为php保存多维数组 1 年前 |
Jannis · Java中数组的怪异行为 1 年前 |
callum · 如何识别数组中与给定序列不匹配的元素? 1 年前 |
tenfour · 如何使用数组元素的索引初始化数组元素 2 年前 |
Guillaume · 使用操作从Python列表创建numpy数组 2 年前 |
maxMas · Swift 5:为什么会出现索引超出范围错误? 2 年前 |