Javascript数组从慢到快从传播到简单(优化)。
IndexOf减量
array.prototype.unique1 =函数(){
var arr = { };
对于(var i = 0;i < this.length;i++){
var =这个{ };
如果(arr.indexof(项)= 1){
Arr.push(项);
}
}
报酬;
}
{ 1、2、3、4、3,4,3,1,'34 ',2 }。unique1(); / / { 1, 2, 3,4
然而,在IE6-8,返回数组的方法是不存在的(虽然这被认为是O点老话题(一_ u)O ~),但是,程序员必须编写一个IndexOf方法:
VaR指标= { }。indexOf函数(ARR,项){
返回arr.indexof(项目);
}:
功能指标(ARR,项){
对于(var i = 0;i < arr.length;i++){
如果(ARR {我} = {项目)
还我;
}
}
返回- 1;
}
array.prototype.unique2 =函数(){
var arr = { };
对于(var i = 0;i < this.length;i++){
var =这个{ };
如果(arr.indexof(项)= 1){
Arr.push(项);
}
}
报酬;
}
{ 1、2、3、4、3,4,3,1,'34 ',2 }。unique2(); / / { 1, 2, 3,4
指数也可以采取这种思维方式。
array.prototype.unique3 =函数(){
var arr = { { 0 } };
对于(var i = 1;i < this.length;i++)
{
如果(this.indexof(这{我})= =我){
Arr.push(本{我});
}
}
报酬;
}
{ 1、2、3、4、3,4,3,1,'34 ',2 }。unique3(); / / { 1, 2, 3,4
哈希减量
上述指标的正确性是没有问题的,但在性能、双周期会降低性能。然后我们使用哈希。
array.prototype.unique4 =函数(){
var arr = { };
var散列{ };
对于(var i = 0;i < this.length;i++){
var =这个{ };
var关键字= typeof(项目)+项目
如果(散列{ }!= 1){
Arr.push(项);
散列{ } = 1;
}
}
报酬;
}
{ 1、2、3、4、3,4,3,1,'34 ',2 }。unique4(); / / { 1, 2, 3,4
其核心是建立一个哈希对象替代指标。空间换时间。请注意,在Javascript中,对象的核心价值只能是一个字符串(当然,6提供地图数据的结构,它类似于一个对象和一个键值对的集合,但是关键的范围不仅仅是一个字符串,和所有类型的值,包括对象,可以作为键。换句话说,物体的结构提供了一个字符串值的对应关系,和地图的结构提供了一种价值值对应,更完美的哈希结构了。)所以无功关键= typeof(项)+项目是需要区分数字1和1之间的字符串。
所以如果你想'4'and 4被认为是相同的(在其他方面)
array.prototype.unique5 =函数(){
var arr = { };
var散列{ };
对于(var i = 0,len = this.length;我< len;i++){
如果(!散列{此{ } }){
Arr.push(本{我});
哈希{此} =真的;
}
}
报酬;
}
{ 1、2、3、4、3,4,3,1,'34 ',2 }。unique5(); / / { 1, 2, 3,4
减肥后的分类
array.prototype.unique6 =函数(){
This.sort();
var arr = { { 0 } };
对于(var i = 1;i < this.length;i++){
如果({ { })!= ARR { arr.length-1 }){
Arr.push(本{我});
}
}
报酬;
}
{ 1、2、3、4、3,4,3,1,'34 ',2 }。unique6(); / / { 1, 2, 3,34
顺序数组,然后将相邻的两值,JS机排序方法排序时使用,所以它是非常快的。这种方法的缺点是只有一点,和字符在字符编码整理。所以你会看到前面2排10。但这并不影响体重。然而,解决排序问题是排序方法接受一个参数,这个参数是一个方法:
(value1,value2功能比较){
如果(value1 value2 P<0.05){
返回- 1;
} else if(value1 value2 { >)
返回1;
{人}
返回0;
}
}
{ 1,2,5,2,10,3,20 }。排序(比较); / / { 1, 2, 2,3, 5, 10,20 }
集减量
6提供了一种新的数据结构,集。它类似于数组,但成员的值是唯一的,没有重复的价值。现在的浏览器完全支持,和服务器的节点也被支持。
array.prototype.unique7 =函数(){
返回array.from(新(这));
}
{ 1、2、3、4、3,4,3,1,'34 ',2 }。unique7(); / / { 1, 2, 3,4
方法库
A method library Underscore.js is recommended, which is very popular in node or browser JS.
const _ =需要('underscore);
_。uniq({ 1, 2, 1,3, 1, 4 }); / / { 1, 2, 3,4 }
测试时间
所有这些方法都可以用一种简单的方法来测试花费的时间,然后为每种方法选择最好的方法。
console.time(测试);
{ 1、2、3、4、3,4,3,1,'34 ',2 }。unique7();
Console.timeEnd(测试);
= = > vm314:3测试:0.378ms
为了使数据变大,随机创建100万个数字:
var arr = { };
var = 0;
对于(var i = 0;i < 1000000;i + +){
Num = math.floor(Math.random)*(100);
Arr.push (Num);
}
console.time(测试);
arr.unique7();
Console.timeEnd(测试);
以上是Javascript数组由萧边提出,要由慢到快,从复杂到简单。希望能对你有所帮助。如果你有任何问题,请给我留言,萧边会及时给您回复。谢谢您支持网站。