比较来自世界各地的卖家的域名和 IT 服务价格

获取数组中的所有唯一值 JavaScript /删除副本/

我有一系列数字,我需要确保它们是唯一的。 我在Internet上找到了下面的代码的片段,它很大,直到数组在其中有零。 我发现
https://coderoad.ru/1890203/
在这里,在这里 Stack Overflow, 这看起来几乎完全相同,但它不容忍失败。

所以,为了帮助我学习,任何人都可以帮助我确定原型脚本出错的地方吗?


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


重复问题的更多答案:

https://coderoad.ru/9229645/
JS

类似的问题:

https://coderoad.ru/840781/
已邀请:

快网

赞同来自:



帮助 JavaScript

1.6 /

ECMAScript 5

您可以使用自己的方法。
filter

如下所述以获取具有唯一值的数组:


function onlyUnique/value, index, self/ { 
return self.indexOf/value/ === index;
}

// usage example:
var a = ['a', 1, 'a', 2, '1'];
var unique = a.filter/ onlyUnique /; // returns ['a', 1, 2, '1']


自己的方法
filter

将循环通过数组并仅留下传输指定回调函数的记录
onlyUnique

.


onlyUnique

检查此值是第一次会议。 如果没有,它应该是重复的,不会被复制。

此解决方案在没有任何其他库的情况下工作,例如 jQuery 或者 prototype.js.

它还适用于具有混合类型的值的阵列。

对于旧浏览器 /<ie9 '1'];="" 'a',="" ,="" .="" 1,="" 2,="" ==""
="" [code]filter[="" [code]indexof[="" [code]lastindexof[="" [url]https:="" a="" array="" code]="" developer.mozilla.org="" docs="" en-us="" es6="" example:="" filter[="" global_objects="" i,="" indexof[="" javascript="" mdn="" myarray="['a'," reference="" unique="myArray.filter//v," url]="" usage="" var="" 上="" 为了="" 从="" 和="" 哪些不支持自己的方法="" 如果要保存最近值的最后输入,只需替换="" 它可以减少:="" 您可以在文档中找到解决方法=""> a.indexOf/v/ === i/; 

// unique is ['a', 1, 2, '1']


谢谢

对于评论中的提示。

ES6 有自己的对象
https://developer.mozilla.org/ ... s/Set
用于存储唯一值。 要获取具有唯一值的数组,您现在可以执行以下操作:


var myArray = ['a', 1, 'a', 2, '1'];

let unique = [...new Set/myArray/];

// unique is ['a', 1, 2, '1']


构造函数
Set

接受迭代对象,例如阵列和分发运算符
...

将集合转换回数组。 谢谢

对于评论中的提示。
</ie9>

知食

赞同来自:

更新的答案 ES6/ES2015

: 使用
https://developer.mozilla.org/ ... s/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, 它也可以减少
https://developer.mozilla.org/ ... rator
, 例如


var uniqueItems = [...new Set/items/]

小姐请别说爱

赞同来自:

我划分了所有答案 4 可能的解决方案:

使用对象
{ }

防止重复

使用辅助阵列
[ ]



filter + indexOf


奖金! 方法 ES6
Sets

.

以下是答案中发现的代码示例:

使用对象
{ }

防止重复


function uniqueArray1/ ar / {
var j = {};

ar.forEach/ function/v/ {
j[v+ '::' + typeof v] = v;
}/;

return Object.keys/j/.map/function/v/{
return j[v];
}/;
}


使用辅助阵列
[ ]



function uniqueArray2/arr/ {
var a = [];
for /var i=0, l=arr.length; i<l; !="" &&="" '1']="" +="" ,="" .="" 1,="" 1-vr4dd0ge0dv1pn9ng6synwn8a407l1zw9ue1cbmwjq="" 2,="" 2020="" 6="" ;="" <="" =="index;" @rab="" ['a',="" [...new="" [code][...new="" [code]filter="" [code]function="" [code]sets[="" [code]{="" [url]https:="" ];="" ][="" a="" a.indexof="" a.push="" a;="" arr[i]="" chrome="" code]="" d="" div="" docs.google.com="" ecma="" edit#gid="0[/url]" eqg6p.png[="" es6="" es6.="" function="" google="" hash.="" i++="" i.stack.imgur.com="" ie.="" if="" index,="" indexof[="" object.="" onlyunique="" return="" returns="" script="" self="" self.indexof="" set="" sheets,="" spreadsheets="" unique="a.filter/" unique;="" uniquearray3="" uniquearray4="" url]="" usage="" value="" value,="" var="" {="" }="" }[="" 不可用b.="" 为了="" 和="" 因此,我很高兴测试为该算法显示了最佳结果="" 因此,我无法检查一下。="" 它结果比方法更快="" 我做了="" 我期望看到使用该对象的代码是什么="" 打开发动机="" 更新="" 现在我测试了最后一个代码="" 用="" 用于测试功能。="" 笔记:="" 而且我想知道他们是谁更快。="" 谢谢="" 赢得,因为他用了="" 这是测试结果:="">
<div class="answer_text">
你也可以使用
[url=http://underscorejs.org/]http://underscorejs.org/[/url]
.


[code]console.log/_.uniq/[1, 2, 1, 3, 1, 4]//;



<script src="[url=http://underscorejs.org/underscore-min.js"></script>]http://underscorejs.org/unders ... gt%3B[/url]



这将返回:


[1, 2, 3, 4]


</div>
<div class="answer_text">
一个衬里,干净 JavaScript

用语法 ES6


list = list.filter//x, i, a/ =&gt; a.indexOf/x/ == i/



x --&gt; item in array
i --&gt; index of item
a --&gt; array reference, /in this case "list"/


https://i.stack.imgur.com/TfGaP.png
用语法 ES5


list = list.filter/function /x, i, a/ { 
return a.indexOf/x/ == i;
}/;


与浏览器的兼容性

: IE9+
</div>
<div class="answer_text">
从那时起,我发现了一种使用的良好方法 jQuery


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


注意:此代码已从消息中删除。
http://paulirish.com/2010/duck ... uery/
- 我忘了给贷款 :P
</div>
<div class="answer_text">
最短的解决方案 ES6:
[...new Set/ [1, 1, 2] /];


或者如果要更改数组的原型 /正如原始问题/:


Array.prototype.getUnique = function// {
return [...new Set/ [this] /];
};


EcmaScript 6 目前只有
https://kangax.github.io/compat-table/es6/
在现代浏览器中 /八月 2015 当年/, 但
http://babeljs.io/
变得非常受转移 ES6 /乃至 ES7/ 早在 ES5. 所以你可以编写代码 ES6 已经今天!

如果您有兴趣,这意味着
...

, 它被称为
https://developer.mozilla.org/ ... rator
. 的
https://developer.mozilla.org/ ... rator
: “操作员 spread 允许您在预期几个参数的那些地方扩展表达式。 /呼叫函数/ 或几个元素 /对于文字Massiva./». 由于套件是迭代的 /并且只能具有独特的价值/, 操作员 spread 将展开集合填充数组。

学习资源 ES6:

http://exploringjs.com/
Axel Rauchmayer博士

http://javascriptweekly.com/se ... %3Djw
的 JS 每周新闻公告

https://hacks.mozilla.org/category/es6-in-depth/
来自博客 Mozilla Hacks
</div>
<div class="answer_text">
最简单的解决方案:


var arr = [1, 3, 4, 1, 2, 1, 3, 3, 4, 1];
console.log/[...new Set/arr/]/;



或者:


var arr = [1, 3, 4, 1, 2, 1, 3, 3, 4, 1];
console.log/Array.from/new Set/arr///;


</div>
<div class="answer_text">
最简单的I.
http://jsperf.com/unique-in-array
/在 Chrome/ 这样做:


Array.prototype.unique = function// {
var a = [];
for /var i=0, l=this.length; i<l; !="i/" &&="" -="" ;="" <="" =="-1" [code]array.prototype.sortunique="function//" [code]function="" [url]http:="" a="[];" a.indexof="" a.push="" a;="" arr="" arr.sort="" arr.splice="" arr;="" arr[i]="" chrome.="" code]="" div="" for="" i="0;i&lt;arr.length;i++/" i++="" i+1,="" i<l;="" if="" jsperf,="" jsperf.com="" l="arr.length;" last_i="arr.lastIndexOf/arr[i]//" last_i-i="" last_i;="" return="" sortunique="" this.sort="" this.splice="" this;="" this[i]="" unique-in-array[="" uniques="" url]="" var="" {="" }[="" 一样的="" 不过,请随时添加自己。="" 只需浏览数组中的每个元素,请检查此元素是否已在列表中,如果不是,请单击返回的数组。="" 在大多数浏览器之外="" 当您还需要对数组进行排序时,以下是以下内容:="" 或者不是原型:="" 排序="" 根据="" 没有原型版本:="" 这是这个功能="">
<div class="answer_text">
只生产效率! 这段代码很可能 10 时间比这里所有代码快

*works 在所有浏览器中,对内存也有最小的影响....
和更多

如果您不需要重复使用旧阵列;顺便说一下,请在转换之前执行必要的其他操作 unique, 这可能是这样做的最快方法,也很短。


[code]var array=[1,2,3,4,5,6,7,8,9,0,1,2,1];


然后你可以尝试一下


var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 1];

function toUnique/a, b, c/ { //array,placeholder,placeholder
b = a.length;
while /c = --b/
while /c--/ a[b] !== a[c] || a.splice/c, 1/;
return a // not needed ;/
}
console.log/toUnique/array//;
//[3, 4, 5, 6, 7, 8, 9, 0, 2, 1]



我想出了这个功能阅读本文......

http://www.shamasis.net/2009/0 ... rray/
/

我不喜欢 for loop. 他必须很多人 parameters.i 喜欢 while-- loop.
while - 这是所有浏览器中最快的周期,此外,我们都喜欢它...... chrome.

在任何情况下,我都写了第一个使用的功能 while. 是的,它比发现的功能快一点 article.but 不够。
unique2//


下一步使用现代 js.
Object.keys

我取代了另一个 for loop 上 js1.7's Object.keys...
一点速度更快,更短 /在 chrome 在 2 速度更快/ ;/. 这还不够!..
unique3//

.

那一刻,我想到了我在独特的函数中真正需要的东西 MY.
我不需要旧阵列,我需要一个快速的功能。
所以我用了 2 环形 while + splice.
unique4//


说我印象深刻是没用的。

chrome:

普通的 150 000 每秒运营跳到 1 800 000 每秒操作。

IE:

80,000 鲸/与柜台 3,500,000 鲸/从

ios:

18 000 鲸/与柜台 170 000 鲸/从

safari:

80 000 鲸/与柜台 6 000 000 鲸/从

证据

http://jsperf.com/wgu
或者更好地使用 console.time... 微波炉......任何东西


unique5//

- 如果您想保存旧阵列,它只是向您展示正在发生的事情。

不使用
Array.prototype

, 如果你不知道你在做什么。
我只是做了很多副本和过去。

Object.defineProperty/Array.prototype,...,writable:false,enumerable:false}/

, 如果你想创建自己的 prototype.example

演示

http://jsfiddle.net/46S7g/
/

NOTE: 你的旧阵列被销毁了/在此操作之后它成为一个。

如果您无法阅读上面的代码,请询问,阅读本书 javascript 或此处有关较短代码的一些解释

有些是使用的
indexOf

... 不是 ...
http://jsperf.com/dgfgghfghfghghgfhgfhfghfhgfh
对于空的盾牌


!array.length||toUnique/array/;


</div>
<div class="answer_text">
这里给出的许多答案可能对初学者无用。 如果De-Dots阵列很困难,他们是否真的知道原型链甚至是 jQuery?

在现代浏览器中,干净和简单的解决方案是存储数据
https://developer.mozilla.org/ ... s/Set
, 这是一个唯一值的列表。


const cars = ['Volvo', 'Jeep', 'Volvo', 'Lincoln', 'Lincoln', 'Ford'];
const uniqueCars = Array.from/new Set/cars//;



Array.from

将设置转换回阵列有用,以便您可以轻松访问所有惊人的方法。 /职能/, 这是阵列中的。 有我。
https://coderoad.ru/20069828/
做同样的事情。 但你可能根本不需要
Array.from

, 由于套件有许多有用的功能,例如
https://developer.mozilla.org/ ... rEach
.

如果您需要支持旧的 Internet Explorer 所以你不能使用 Set, 简单的方法是将项目复制到新数组,预先检查它们是否已在新阵列中。


// Create a list of cars, with duplicates.
var cars = ['Volvo', 'Jeep', 'Volvo', 'Lincoln', 'Lincoln', 'Ford'];
// Create a list of unique cars, to put a car in if we haven't already.
var uniqueCars = [];

// Go through each car, one at a time.
cars.forEach/function /car/ {
// The code within the following block runs only if the
// current car does NOT exist in the uniqueCars list
// - a.k.a. prevent duplicates
if /uniqueCars.indexOf/car/ === -1/ {
// Since we now know we haven't seen this car before,
// copy it to the end of the uniqueCars list.
uniqueCars.push/car/;
}
}/;


要立即可重复使用,让我们把它放在一个函数中。


function deduplicate/data/ {
if /data.length &gt; 0/ {
var result = [];

data.forEach/function /elem/ {
if /result.indexOf/elem/ === -1/ {
result.push/elem/;
}
}/;

return result;
}
}


因此,要摆脱重复,我们现在会这样做。


var uniqueCars = deduplicate/cars/;


部分
deduplicate/cars/


成为

我们所谓的

结果

, 当功能完成时。

只是给他你喜欢的任何墓地的名字。
</div>
<div class="answer_text">

["Defects", "Total", "Days", "City", "Defects"].reduce/function/prev, cur/ {
return /prev.indexOf/cur/ &lt; 0/ ? prev.concat/[cur]/ : prev;
}, []/;

[0,1,2,0,3,2,1,5].reduce/function/prev, cur/ {
return /prev.indexOf/cur/ &lt; 0/ ? prev.concat/[cur]/ : prev;
}, []/;


</div>
<div class="answer_text">
我们可以使用集 ES6:


var duplicatedArray = [1, 2, 3, 4, 5, 1, 1, 1, 2, 3, 4];
var uniqueArray = Array.from/new Set/duplicatedArray//;

console.log/uniqueArray/;



//The 输出将如下


uniqueArray = [1,2,3,4,5];


</div>
<div class="answer_text">
这个原型
getUnique

不完全正确,因为如果我有一系列类型:
["1",1,2,3,4,1,"foo"]

, 他会回来
["1","2","3","4"]

, 但
"1"

-Stop,A。
1

-整数; 它们是不同的。

这是正确的决定:


Array.prototype.unique = function/a/{
return function//{ return this.filter/a/ }
}/function/a,b,c/{ return c.indexOf/a,b+1/ &lt; 0 }/;


通过:


var foo;
foo = ["1",1,2,3,4,1,"foo"];
foo.unique//;


上述会给予
["1",2,3,4,1,"foo"]

.
</div>
<div class="answer_text">
没有扩张 Array.prototype /说这是一个糟糕的做法/ 或使用 jquery/underscore,, 你可以简单
filter

大批。

通过保持最后一个条目:


function arrayLastUnique/array/ {
return array.filter/function /a, b, c/ {
// keeps last occurrence
return c.indexOf/a, b + 1/ &lt; 0;
}/;
},


或第一次出现:


function arrayFirstUnique/array/ {
return array.filter/function /a, b, c/ {
// keeps first occurrence
return c.indexOf/a/ === b;
}/;
},


好吧,它只是 javascript ECMAScript 5+, 它只意味着什么 IE9+, 但这对本土的发展有益 HTML/和 JS /Windows 应用商店, Firefox OS, Sencha,Help. PhoneGap, Titanium, .../.
</div>
<div class="answer_text">

[...new Set/duplicates/]


这是最简单的选择,并指的是
https://developer.mozilla.org/ ... array
.


const numbers = [2,3,4,4,2,3,3,4,4,5,5,6,6,7,5,32,3,4,5]
console.log/[...new Set/numbers/]/ // [2, 3, 4, 5, 6, 7, 32]


</div>
<div class="answer_text">
魔法


a.filter/e=&gt;!/t[e]=e in t//


O/n/

https://jsperf.com/uniquefilter/1
; 我们假设您的阵列正在进行中
a


t={}

. 解释

/+

impr./


let t={}, unique= a=&gt; a.filter/e=&gt;!/t[e]=e in t//;

// "stand-alone" version working with global t:
// a1.filter//t={},e=&gt;!/t[e]=e in t///;

// Test data
let a1 = [5,6,0,4,9,2,3,5,0,3,4,1,5,4,9];
let a2 = [[2, 17], [2, 17], [2, 17], [1, 12], [5, 9], [1, 12], [6, 2], [1, 12]];
let a3 = ['Mike', 'Adam','Matt', 'Nancy', 'Adam', 'Jenny', 'Nancy', 'Carl'];

// Results
console.log/JSON.stringify/ unique/a1/ //
console.log/JSON.stringify/ unique/a2/ //
console.log/JSON.stringify/ unique/a3/ //


</div>
<div class="answer_text">
如果您使用的是原型框架,则无需进行周期 'for', 您可以使用
http://www.prototypejs.org/api/array/uniq
像这样:


var a = Array.uniq//;


什么将导致创建重复数组而无需重复。 我遇到了你的问题,寻找计算数组各种问题的方法,所以之后

uniq//

我用了

size//

这是我的简单结果。
p.s. 对不起,如果我错过了错了

edit: 如果要避免不确定的记录,可以添加

compact//

以前,如下:


var a = Array.compact//.uniq//;


</div>
<div class="answer_text">
现在,使用集合,您可以删除重复并将它们转换回阵列。


var names = ["Mike","Matt","Nancy", "Matt","Adam","Jenny","Nancy","Carl"];

console.log/[...new Set/names/]/



另一种决定是使用排序过滤器 &amp;


var names = ["Mike","Matt","Nancy", "Matt","Adam","Jenny","Nancy","Carl"];
var namesSorted = names.sort//;
const result = namesSorted.filter//e, i/ =&gt; namesSorted[i] != namesSorted[i+1]/;
console.log/result/;


</div>
<div class="answer_text">
这是因为
0

- 复合B. JavaScript.


this[i]

如果阵列的值相等,则会为false 0 或任何其他错误值。
</div>
<div class="answer_text">

Array.prototype.getUnique = function// {
var o = {}, a = []
for /var i = 0; i &lt; this.length; i++/ o[this[i]] = 1
for /var e in o/ a.push/e/
return a
}


</div>
<div class="answer_text">
当我需要删除对象时,我有一个略有不同的问题,其中来自阵列的标识符的重复属性。 有效。


let objArr = [{
id: '123'
}, {
id: '123'
}, {
id: '456'
}];

objArr = objArr.reduce//acc, cur/ =&gt; [
...acc.filter//obj/ =&gt; obj.id !== cur.id/, cur
], []/;

console.log/objArr/;


</div>
<div class="answer_text">
最简单的答案是 :


const array = [1, 1, 2, 2, 3, 5, 5, 2];
const uniqueArray = [...new Set/array/];
console.log/uniqueArray/; // [1, 2, 3, 5]


</div>
<div class="answer_text">


http://www.shamasis.net/2009/0 ... rray/
/O/2n/ time complexity/ :


Array.prototype.unique = function// {
var o = {}, i, l = this.length, r = [];
for/i=0; i<l;i+=1 !!arr[0].nodetype="" "last"]="" $="" $.grep="" $.inarray="" $.unique="" 2,="" 2010="" 3,="" 4,="" 5][="" 7,="" :="" ;="" <="" =="k;" [="" ["first",="" [1,="" [code]="" [url]http:="" _old="$.unique;" _old.apply="" an="" api.jquery.com="" arr="" arr,function="" array="" behavior="" code]="" contain="" default="" div="" do="" duck-punching-with-jquery="" dupes="" elements="" else="" for="" function="" got="" grep="" i="" if="" in="" inarray="" jquery="" jquery.unique="" no="" o="" o[i]="" o[this[i]]="this[i];" of="" only="" paulirish.com="" r.push="" r;="" reduce="" return="" the="" this,arguments="" to="" true,="" url]="" use..="" v,arr="" v,k="" var="" via="" we="" {="" }="" };="" };[="" 改善="" 的="">
<div class="answer_text">
我不知道为什么Gabriel Sylveira以这种方式写下了这个功能,而是一种更简单的形式,在我身上也适用于我,没有欺凌,有:


[code]Array.prototype.unique = function// {
return this.filter/function/value, index, array/ {
return array.indexOf/value, index + 1/ &lt; 0;
}/;
};


或者 CoffeeScript 年:


Array.prototype.unique = -&gt;
this.filter/ /value, index, array/ -&gt;
array.indexOf/value, index + 1/ &lt; 0
/


</div>
</l;i+=1></div></l;></div></l;>

小明明

赞同来自:

你也可以使用
http://underscorejs.org/
.


console.log/_.uniq/[1, 2, 1, 3, 1, 4]//;



<script src="[url=http://underscorejs.org/underscore-min.js"></script>]http://underscorejs.org/unders ... gt%3B[/url]



这将返回:


[1, 2, 3, 4]

卫东

赞同来自:

一个衬里,干净 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"/


https://i.stack.imgur.com/TfGaP.png
用语法 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;
}/;


注意:此代码已从消息中删除。
http://paulirish.com/2010/duck ... uery/
- 我忘了给贷款 :P

董宝中

赞同来自:

最短的解决方案 ES6:
[...new Set/ [1, 1, 2] /];


或者如果要更改数组的原型 /正如原始问题/:


Array.prototype.getUnique = function// {
return [...new Set/ [this] /];
};


EcmaScript 6 目前只有
https://kangax.github.io/compat-table/es6/
在现代浏览器中 /八月 2015 当年/, 但
http://babeljs.io/
变得非常受转移 ES6 /乃至 ES7/ 早在 ES5. 所以你可以编写代码 ES6 已经今天!

如果您有兴趣,这意味着
...

, 它被称为
https://developer.mozilla.org/ ... rator
. 的
https://developer.mozilla.org/ ... rator
: “操作员 spread 允许您在预期几个参数的那些地方扩展表达式。 /呼叫函数/ 或几个元素 /对于文字Massiva./». 由于套件是迭代的 /并且只能具有独特的价值/, 操作员 spread 将展开集合填充数组。

学习资源 ES6:

http://exploringjs.com/
Axel Rauchmayer博士

http://javascriptweekly.com/se ... %3Djw
的 JS 每周新闻公告

https://hacks.mozilla.org/category/es6-in-depth/
来自博客 Mozilla Hacks

董宝中

赞同来自:

最简单的解决方案:


var arr = [1, 3, 4, 1, 2, 1, 3, 3, 4, 1];
console.log/[...new Set/arr/]/;



或者:


var arr = [1, 3, 4, 1, 2, 1, 3, 3, 4, 1];
console.log/Array.from/new Set/arr///;

裸奔

赞同来自:

最简单的I.
http://jsperf.com/unique-in-array
/在 Chrome/ 这样做:


Array.prototype.unique = function// {
var a = [];
for /var i=0, l=this.length; i<l; !="i/" &&="" -="" ;="" <="" =="-1" [code]array.prototype.sortunique="function//" [code]function="" [url]http:="" a="[];" a.indexof="" a.push="" a;="" arr="" arr.sort="" arr.splice="" arr;="" arr[i]="" chrome.="" code]="" div="" for="" i="0;i&lt;arr.length;i++/" i++="" i+1,="" i<l;="" if="" jsperf,="" jsperf.com="" l="arr.length;" last_i="arr.lastIndexOf/arr[i]//" last_i-i="" last_i;="" return="" sortunique="" this.sort="" this.splice="" this;="" this[i]="" unique-in-array[="" uniques="" url]="" var="" {="" }[="" 一样的="" 不过,请随时添加自己。="" 只需浏览数组中的每个元素,请检查此元素是否已在列表中,如果不是,请单击返回的数组。="" 在大多数浏览器之外="" 当您还需要对数组进行排序时,以下是以下内容:="" 或者不是原型:="" 排序="" 根据="" 没有原型版本:="" 这是这个功能="">
<div class="answer_text">
只生产效率! 这段代码很可能 10 时间比这里所有代码快

*works 在所有浏览器中,对内存也有最小的影响....
和更多

如果您不需要重复使用旧阵列;顺便说一下,请在转换之前执行必要的其他操作 unique, 这可能是这样做的最快方法,也很短。


[code]var array=[1,2,3,4,5,6,7,8,9,0,1,2,1];


然后你可以尝试一下


var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 1];

function toUnique/a, b, c/ { //array,placeholder,placeholder
b = a.length;
while /c = --b/
while /c--/ a[b] !== a[c] || a.splice/c, 1/;
return a // not needed ;/
}
console.log/toUnique/array//;
//[3, 4, 5, 6, 7, 8, 9, 0, 2, 1]



我想出了这个功能阅读本文......

http://www.shamasis.net/2009/0 ... rray/
/

我不喜欢 for loop. 他必须很多人 parameters.i 喜欢 while-- loop.
while - 这是所有浏览器中最快的周期,此外,我们都喜欢它...... chrome.

在任何情况下,我都写了第一个使用的功能 while. 是的,它比发现的功能快一点 article.but 不够。
unique2//


下一步使用现代 js.
Object.keys

我取代了另一个 for loop 上 js1.7's Object.keys...
一点速度更快,更短 /在 chrome 在 2 速度更快/ ;/. 这还不够!..
unique3//

.

那一刻,我想到了我在独特的函数中真正需要的东西 MY.
我不需要旧阵列,我需要一个快速的功能。
所以我用了 2 环形 while + splice.
unique4//


说我印象深刻是没用的。

chrome:

普通的 150 000 每秒运营跳到 1 800 000 每秒操作。

IE:

80,000 鲸/与柜台 3,500,000 鲸/从

ios:

18 000 鲸/与柜台 170 000 鲸/从

safari:

80 000 鲸/与柜台 6 000 000 鲸/从

证据

http://jsperf.com/wgu
或者更好地使用 console.time... 微波炉......任何东西


unique5//

- 如果您想保存旧阵列,它只是向您展示正在发生的事情。

不使用
Array.prototype

, 如果你不知道你在做什么。
我只是做了很多副本和过去。

Object.defineProperty/Array.prototype,...,writable:false,enumerable:false}/

, 如果你想创建自己的 prototype.example

演示

http://jsfiddle.net/46S7g/
/

NOTE: 你的旧阵列被销毁了/在此操作之后它成为一个。

如果您无法阅读上面的代码,请询问,阅读本书 javascript 或此处有关较短代码的一些解释

有些是使用的
indexOf

... 不是 ...
http://jsperf.com/dgfgghfghfghghgfhgfhfghfhgfh
对于空的盾牌


!array.length||toUnique/array/;


</div>
<div class="answer_text">
这里给出的许多答案可能对初学者无用。 如果De-Dots阵列很困难,他们是否真的知道原型链甚至是 jQuery?

在现代浏览器中,干净和简单的解决方案是存储数据
https://developer.mozilla.org/ ... s/Set
, 这是一个唯一值的列表。


const cars = ['Volvo', 'Jeep', 'Volvo', 'Lincoln', 'Lincoln', 'Ford'];
const uniqueCars = Array.from/new Set/cars//;



Array.from

将设置转换回阵列有用,以便您可以轻松访问所有惊人的方法。 /职能/, 这是阵列中的。 有我。
https://coderoad.ru/20069828/
做同样的事情。 但你可能根本不需要
Array.from

, 由于套件有许多有用的功能,例如
https://developer.mozilla.org/ ... rEach
.

如果您需要支持旧的 Internet Explorer 所以你不能使用 Set, 简单的方法是将项目复制到新数组,预先检查它们是否已在新阵列中。


// Create a list of cars, with duplicates.
var cars = ['Volvo', 'Jeep', 'Volvo', 'Lincoln', 'Lincoln', 'Ford'];
// Create a list of unique cars, to put a car in if we haven't already.
var uniqueCars = [];

// Go through each car, one at a time.
cars.forEach/function /car/ {
// The code within the following block runs only if the
// current car does NOT exist in the uniqueCars list
// - a.k.a. prevent duplicates
if /uniqueCars.indexOf/car/ === -1/ {
// Since we now know we haven't seen this car before,
// copy it to the end of the uniqueCars list.
uniqueCars.push/car/;
}
}/;


要立即可重复使用,让我们把它放在一个函数中。


function deduplicate/data/ {
if /data.length &gt; 0/ {
var result = [];

data.forEach/function /elem/ {
if /result.indexOf/elem/ === -1/ {
result.push/elem/;
}
}/;

return result;
}
}


因此,要摆脱重复,我们现在会这样做。


var uniqueCars = deduplicate/cars/;


部分
deduplicate/cars/


成为

我们所谓的

结果

, 当功能完成时。

只是给他你喜欢的任何墓地的名字。
</div>
<div class="answer_text">

["Defects", "Total", "Days", "City", "Defects"].reduce/function/prev, cur/ {
return /prev.indexOf/cur/ &lt; 0/ ? prev.concat/[cur]/ : prev;
}, []/;

[0,1,2,0,3,2,1,5].reduce/function/prev, cur/ {
return /prev.indexOf/cur/ &lt; 0/ ? prev.concat/[cur]/ : prev;
}, []/;


</div>
<div class="answer_text">
我们可以使用集 ES6:


var duplicatedArray = [1, 2, 3, 4, 5, 1, 1, 1, 2, 3, 4];
var uniqueArray = Array.from/new Set/duplicatedArray//;

console.log/uniqueArray/;



//The 输出将如下


uniqueArray = [1,2,3,4,5];


</div>
<div class="answer_text">
这个原型
getUnique

不完全正确,因为如果我有一系列类型:
["1",1,2,3,4,1,"foo"]

, 他会回来
["1","2","3","4"]

, 但
"1"

-Stop,A。
1

-整数; 它们是不同的。

这是正确的决定:


Array.prototype.unique = function/a/{
return function//{ return this.filter/a/ }
}/function/a,b,c/{ return c.indexOf/a,b+1/ &lt; 0 }/;


通过:


var foo;
foo = ["1",1,2,3,4,1,"foo"];
foo.unique//;


上述会给予
["1",2,3,4,1,"foo"]

.
</div>
<div class="answer_text">
没有扩张 Array.prototype /说这是一个糟糕的做法/ 或使用 jquery/underscore,, 你可以简单
filter

大批。

通过保持最后一个条目:


function arrayLastUnique/array/ {
return array.filter/function /a, b, c/ {
// keeps last occurrence
return c.indexOf/a, b + 1/ &lt; 0;
}/;
},


或第一次出现:


function arrayFirstUnique/array/ {
return array.filter/function /a, b, c/ {
// keeps first occurrence
return c.indexOf/a/ === b;
}/;
},


好吧,它只是 javascript ECMAScript 5+, 它只意味着什么 IE9+, 但这对本土的发展有益 HTML/和 JS /Windows 应用商店, Firefox OS, Sencha,Help. PhoneGap, Titanium, .../.
</div>
<div class="answer_text">

[...new Set/duplicates/]


这是最简单的选择,并指的是
https://developer.mozilla.org/ ... array
.


const numbers = [2,3,4,4,2,3,3,4,4,5,5,6,6,7,5,32,3,4,5]
console.log/[...new Set/numbers/]/ // [2, 3, 4, 5, 6, 7, 32]


</div>
<div class="answer_text">
魔法


a.filter/e=&gt;!/t[e]=e in t//


O/n/

https://jsperf.com/uniquefilter/1
; 我们假设您的阵列正在进行中
a


t={}

. 解释

/+

impr./


let t={}, unique= a=&gt; a.filter/e=&gt;!/t[e]=e in t//;

// "stand-alone" version working with global t:
// a1.filter//t={},e=&gt;!/t[e]=e in t///;

// Test data
let a1 = [5,6,0,4,9,2,3,5,0,3,4,1,5,4,9];
let a2 = [[2, 17], [2, 17], [2, 17], [1, 12], [5, 9], [1, 12], [6, 2], [1, 12]];
let a3 = ['Mike', 'Adam','Matt', 'Nancy', 'Adam', 'Jenny', 'Nancy', 'Carl'];

// Results
console.log/JSON.stringify/ unique/a1/ //
console.log/JSON.stringify/ unique/a2/ //
console.log/JSON.stringify/ unique/a3/ //


</div>
<div class="answer_text">
如果您使用的是原型框架,则无需进行周期 'for', 您可以使用
http://www.prototypejs.org/api/array/uniq
像这样:


var a = Array.uniq//;


什么将导致创建重复数组而无需重复。 我遇到了你的问题,寻找计算数组各种问题的方法,所以之后

uniq//

我用了

size//

这是我的简单结果。
p.s. 对不起,如果我错过了错了

edit: 如果要避免不确定的记录,可以添加

compact//

以前,如下:


var a = Array.compact//.uniq//;


</div>
<div class="answer_text">
现在,使用集合,您可以删除重复并将它们转换回阵列。


var names = ["Mike","Matt","Nancy", "Matt","Adam","Jenny","Nancy","Carl"];

console.log/[...new Set/names/]/



另一种决定是使用排序过滤器 &amp;


var names = ["Mike","Matt","Nancy", "Matt","Adam","Jenny","Nancy","Carl"];
var namesSorted = names.sort//;
const result = namesSorted.filter//e, i/ =&gt; namesSorted[i] != namesSorted[i+1]/;
console.log/result/;


</div>
<div class="answer_text">
这是因为
0

- 复合B. JavaScript.


this[i]

如果阵列的值相等,则会为false 0 或任何其他错误值。
</div>
<div class="answer_text">

Array.prototype.getUnique = function// {
var o = {}, a = []
for /var i = 0; i &lt; this.length; i++/ o[this[i]] = 1
for /var e in o/ a.push/e/
return a
}


</div>
<div class="answer_text">
当我需要删除对象时,我有一个略有不同的问题,其中来自阵列的标识符的重复属性。 有效。


let objArr = [{
id: '123'
}, {
id: '123'
}, {
id: '456'
}];

objArr = objArr.reduce//acc, cur/ =&gt; [
...acc.filter//obj/ =&gt; obj.id !== cur.id/, cur
], []/;

console.log/objArr/;


</div>
<div class="answer_text">
最简单的答案是 :


const array = [1, 1, 2, 2, 3, 5, 5, 2];
const uniqueArray = [...new Set/array/];
console.log/uniqueArray/; // [1, 2, 3, 5]


</div>
<div class="answer_text">


http://www.shamasis.net/2009/0 ... rray/
/O/2n/ time complexity/ :


Array.prototype.unique = function// {
var o = {}, i, l = this.length, r = [];
for/i=0; i<l;i+=1 !!arr[0].nodetype="" "last"]="" $="" $.grep="" $.inarray="" $.unique="" 2,="" 2010="" 3,="" 4,="" 5][="" 7,="" :="" ;="" <="" =="k;" [="" ["first",="" [1,="" [code]="" [url]http:="" _old="$.unique;" _old.apply="" an="" api.jquery.com="" arr="" arr,function="" array="" behavior="" code]="" contain="" default="" div="" do="" duck-punching-with-jquery="" dupes="" elements="" else="" for="" function="" got="" grep="" i="" if="" in="" inarray="" jquery="" jquery.unique="" no="" o="" o[i]="" o[this[i]]="this[i];" of="" only="" paulirish.com="" r.push="" r;="" reduce="" return="" the="" this,arguments="" to="" true,="" url]="" use..="" v,arr="" v,k="" var="" via="" we="" {="" }="" };="" };[="" 改善="" 的="">
<div class="answer_text">
我不知道为什么Gabriel Sylveira以这种方式写下了这个功能,而是一种更简单的形式,在我身上也适用于我,没有欺凌,有:


[code]Array.prototype.unique = function// {
return this.filter/function/value, index, array/ {
return array.indexOf/value, index + 1/ &lt; 0;
}/;
};


或者 CoffeeScript 年:


Array.prototype.unique = -&gt;
this.filter/ /value, index, array/ -&gt;
array.indexOf/value, index + 1/ &lt; 0
/


</div>
</l;i+=1></div></l;>

裸奔

赞同来自:

只生产效率! 这段代码很可能 10 时间比这里所有代码快

*works 在所有浏览器中,对内存也有最小的影响....
和更多

如果您不需要重复使用旧阵列;顺便说一下,请在转换之前执行必要的其他操作 unique, 这可能是这样做的最快方法,也很短。


var array=[1,2,3,4,5,6,7,8,9,0,1,2,1];


然后你可以尝试一下


var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 1];

function toUnique/a, b, c/ { //array,placeholder,placeholder
b = a.length;
while /c = --b/
while /c--/ a[b] !== a[c] || a.splice/c, 1/;
return a // not needed ;/
}
console.log/toUnique/array//;
//[3, 4, 5, 6, 7, 8, 9, 0, 2, 1]



我想出了这个功能阅读本文......

http://www.shamasis.net/2009/0 ... rray/
/

我不喜欢 for loop. 他必须很多人 parameters.i 喜欢 while-- loop.
while - 这是所有浏览器中最快的周期,此外,我们都喜欢它...... chrome.

在任何情况下,我都写了第一个使用的功能 while. 是的,它比发现的功能快一点 article.but 不够。
unique2//


下一步使用现代 js.
Object.keys

我取代了另一个 for loop 上 js1.7's Object.keys...
一点速度更快,更短 /在 chrome 在 2 速度更快/ ;/. 这还不够!..
unique3//

.

那一刻,我想到了我在独特的函数中真正需要的东西 MY.
我不需要旧阵列,我需要一个快速的功能。
所以我用了 2 环形 while + splice.
unique4//


说我印象深刻是没用的。

chrome:

普通的 150 000 每秒运营跳到 1 800 000 每秒操作。

IE:

80,000 鲸/与柜台 3,500,000 鲸/从

ios:

18 000 鲸/与柜台 170 000 鲸/从

safari:

80 000 鲸/与柜台 6 000 000 鲸/从

证据

http://jsperf.com/wgu
或者更好地使用 console.time... 微波炉......任何东西


unique5//

- 如果您想保存旧阵列,它只是向您展示正在发生的事情。

不使用
Array.prototype

, 如果你不知道你在做什么。
我只是做了很多副本和过去。

Object.defineProperty/Array.prototype,...,writable:false,enumerable:false}/

, 如果你想创建自己的 prototype.example

演示

http://jsfiddle.net/46S7g/
/

NOTE: 你的旧阵列被销毁了/在此操作之后它成为一个。

如果您无法阅读上面的代码,请询问,阅读本书 javascript 或此处有关较短代码的一些解释

有些是使用的
indexOf

... 不是 ...
http://jsperf.com/dgfgghfghfghghgfhgfhfghfhgfh
对于空的盾牌


!array.length||toUnique/array/;

石油百科

赞同来自:

这里给出的许多答案可能对初学者无用。 如果De-Dots阵列很困难,他们是否真的知道原型链甚至是 jQuery?

在现代浏览器中,干净和简单的解决方案是存储数据
https://developer.mozilla.org/ ... s/Set
, 这是一个唯一值的列表。


const cars = ['Volvo', 'Jeep', 'Volvo', 'Lincoln', 'Lincoln', 'Ford'];
const uniqueCars = Array.from/new Set/cars//;



Array.from

将设置转换回阵列有用,以便您可以轻松访问所有惊人的方法。 /职能/, 这是阵列中的。 有我。
https://coderoad.ru/20069828/
做同样的事情。 但你可能根本不需要
Array.from

, 由于套件有许多有用的功能,例如
https://developer.mozilla.org/ ... rEach
.

如果您需要支持旧的 Internet Explorer 所以你不能使用 Set, 简单的方法是将项目复制到新数组,预先检查它们是否已在新阵列中。


// Create a list of cars, with duplicates.
var cars = ['Volvo', 'Jeep', 'Volvo', 'Lincoln', 'Lincoln', 'Ford'];
// Create a list of unique cars, to put a car in if we haven't already.
var uniqueCars = [];

// Go through each car, one at a time.
cars.forEach/function /car/ {
// The code within the following block runs only if the
// current car does NOT exist in the uniqueCars list
// - a.k.a. prevent duplicates
if /uniqueCars.indexOf/car/ === -1/ {
// Since we now know we haven't seen this car before,
// copy it to the end of the uniqueCars list.
uniqueCars.push/car/;
}
}/;


要立即可重复使用,让我们把它放在一个函数中。


function deduplicate/data/ {
if /data.length > 0/ {
var result = [];

data.forEach/function /elem/ {
if /result.indexOf/elem/ === -1/ {
result.push/elem/;
}
}/;

return result;
}
}


因此,要摆脱重复,我们现在会这样做。


var uniqueCars = deduplicate/cars/;


部分
deduplicate/cars/


成为

我们所谓的

结果

, 当功能完成时。

只是给他你喜欢的任何墓地的名字。

知食

赞同来自:

["Defects", "Total", "Days", "City", "Defects"].reduce/function/prev, cur/ {
return /prev.indexOf/cur/ < 0/ ? prev.concat/[cur]/ : prev;
}, []/;

[0,1,2,0,3,2,1,5].reduce/function/prev, cur/ {
return /prev.indexOf/cur/ < 0/ ? prev.concat/[cur]/ : prev;
}, []/;

龙天

赞同来自:

我们可以使用集 ES6:


var duplicatedArray = [1, 2, 3, 4, 5, 1, 1, 1, 2, 3, 4];
var uniqueArray = Array.from/new Set/duplicatedArray//;

console.log/uniqueArray/;



//The 输出将如下


uniqueArray = [1,2,3,4,5];

帅驴

赞同来自:

这个原型
getUnique

不完全正确,因为如果我有一系列类型:
["1",1,2,3,4,1,"foo"]

, 他会回来
["1","2","3","4"]

, 但
"1"

-Stop,A。
1

-整数; 它们是不同的。

这是正确的决定:


Array.prototype.unique = function/a/{
return function//{ return this.filter/a/ }
}/function/a,b,c/{ return c.indexOf/a,b+1/ < 0 }/;


通过:


var foo;
foo = ["1",1,2,3,4,1,"foo"];
foo.unique//;


上述会给予
["1",2,3,4,1,"foo"]

.

帅驴

赞同来自:

没有扩张 Array.prototype /说这是一个糟糕的做法/ 或使用 jquery/underscore,, 你可以简单
filter

大批。

通过保持最后一个条目:


function arrayLastUnique/array/ {
return array.filter/function /a, b, c/ {
// keeps last occurrence
return c.indexOf/a, b + 1/ < 0;
}/;
},


或第一次出现:


function arrayFirstUnique/array/ {
return array.filter/function /a, b, c/ {
// keeps first occurrence
return c.indexOf/a/ === b;
}/;
},


好吧,它只是 javascript ECMAScript 5+, 它只意味着什么 IE9+, 但这对本土的发展有益 HTML/和 JS /Windows 应用商店, Firefox OS, Sencha,Help. PhoneGap, Titanium, .../.

裸奔

赞同来自:

[...new Set/duplicates/]


这是最简单的选择,并指的是
https://developer.mozilla.org/ ... array
.


const numbers = [2,3,4,4,2,3,3,4,4,5,5,6,6,7,5,32,3,4,5]
console.log/[...new Set/numbers/]/ // [2, 3, 4, 5, 6, 7, 32]

三叔

赞同来自:

魔法


a.filter/e=>!/t[e]=e in t//


O/n/

https://jsperf.com/uniquefilter/1
; 我们假设您的阵列正在进行中
a


t={}

. 解释

/+

impr./


let t={}, unique= a=> a.filter/e=>!/t[e]=e in t//;

// "stand-alone" version working with global t:
// a1.filter//t={},e=>!/t[e]=e in t///;

// Test data
let a1 = [5,6,0,4,9,2,3,5,0,3,4,1,5,4,9];
let a2 = [[2, 17], [2, 17], [2, 17], [1, 12], [5, 9], [1, 12], [6, 2], [1, 12]];
let a3 = ['Mike', 'Adam','Matt', 'Nancy', 'Adam', 'Jenny', 'Nancy', 'Carl'];

// Results
console.log/JSON.stringify/ unique/a1/ //
console.log/JSON.stringify/ unique/a2/ //
console.log/JSON.stringify/ unique/a3/ //

帅驴

赞同来自:

如果您使用的是原型框架,则无需进行周期 'for', 您可以使用
http://www.prototypejs.org/api/array/uniq
像这样:


var a = Array.uniq//;


什么将导致创建重复数组而无需重复。 我遇到了你的问题,寻找计算数组各种问题的方法,所以之后

uniq//

我用了

size//

这是我的简单结果。
p.s. 对不起,如果我错过了错了

edit: 如果要避免不确定的记录,可以添加

compact//

以前,如下:


var a = Array.compact//.uniq//;

江南孤鹜

赞同来自:

现在,使用集合,您可以删除重复并将它们转换回阵列。


var names = ["Mike","Matt","Nancy", "Matt","Adam","Jenny","Nancy","Carl"];

console.log/[...new Set/names/]/



另一种决定是使用排序过滤器 &


var names = ["Mike","Matt","Nancy", "Matt","Adam","Jenny","Nancy","Carl"];
var namesSorted = names.sort//;
const result = namesSorted.filter//e, i/ => namesSorted[i] != namesSorted[i+1]/;
console.log/result/;

三叔

赞同来自:

这是因为
0

- 复合B. JavaScript.


this[i]

如果阵列的值相等,则会为false 0 或任何其他错误值。

帅驴

赞同来自:

Array.prototype.getUnique = function// {
var o = {}, a = []
for /var i = 0; i < this.length; i++/ o[this[i]] = 1
for /var e in o/ a.push/e/
return a
}

詹大官人

赞同来自:

当我需要删除对象时,我有一个略有不同的问题,其中来自阵列的标识符的重复属性。 有效。


let objArr = [{
id: '123'
}, {
id: '123'
}, {
id: '456'
}];

objArr = objArr.reduce//acc, cur/ => [
...acc.filter//obj/ => obj.id !== cur.id/, cur
], []/;

console.log/objArr/;

冰洋

赞同来自:

最简单的答案是 :


const array = [1, 1, 2, 2, 3, 5, 5, 2];
const uniqueArray = [...new Set/array/];
console.log/uniqueArray/; // [1, 2, 3, 5]

石油百科

赞同来自:



http://www.shamasis.net/2009/0 ... rray/
/O/2n/ time complexity/ :


Array.prototype.unique = function// {
var o = {}, i, l = this.length, r = [];
for/i=0; i<l;i+=1 !!arr[0].nodetype="" "last"]="" $="" $.grep="" $.inarray="" $.unique="" 2,="" 2010="" 3,="" 4,="" 5][="" 7,="" :="" ;="" <="" =="k;" [="" ["first",="" [1,="" [code]="" [url]http:="" _old="$.unique;" _old.apply="" an="" api.jquery.com="" arr="" arr,function="" array="" behavior="" code]="" contain="" default="" div="" do="" duck-punching-with-jquery="" dupes="" elements="" else="" for="" function="" got="" grep="" i="" if="" in="" inarray="" jquery="" jquery.unique="" no="" o="" o[i]="" o[this[i]]="this[i];" of="" only="" paulirish.com="" r.push="" r;="" reduce="" return="" the="" this,arguments="" to="" true,="" url]="" use..="" v,arr="" v,k="" var="" via="" we="" {="" }="" };="" };[="" 改善="" 的="">
<div class="answer_text">
我不知道为什么Gabriel Sylveira以这种方式写下了这个功能,而是一种更简单的形式,在我身上也适用于我,没有欺凌,有:


[code]Array.prototype.unique = function// {
return this.filter/function/value, index, array/ {
return array.indexOf/value, index + 1/ &lt; 0;
}/;
};


或者 CoffeeScript 年:


Array.prototype.unique = -&gt;
this.filter/ /value, index, array/ -&gt;
array.indexOf/value, index + 1/ &lt; 0
/


</div>
</l;i+=1>

诸葛浮云

赞同来自:

我不知道为什么Gabriel Sylveira以这种方式写下了这个功能,而是一种更简单的形式,在我身上也适用于我,没有欺凌,有:


Array.prototype.unique = function// {
return this.filter/function/value, index, array/ {
return array.indexOf/value, index + 1/ < 0;
}/;
};


或者 CoffeeScript 年:


Array.prototype.unique = ->
this.filter/ /value, index, array/ ->
array.indexOf/value, index + 1/ < 0
/

要回复问题请先登录注册