let array = [1,2,3,3,4,2,4,5];
方法一(通過indexOf,返回該數(shù)組下表)
Array.prototype.unique = function()
{
var n = [this[0]]; //結(jié)果數(shù)組
for(var i = 1; i < this.length; i++) //從第二項開始遍歷
{
// //如果當前數(shù)組的第i項在當前數(shù)組中第一次出現(xiàn)的位置不是i囤官,
// //那么表示第i項是重復的糜俗,忽略掉胜榔。否則存入結(jié)果數(shù)組
if (this.indexOf(this[i]) == i) n.push(this[i]);
console.log(this.indexOf(this[i]),i);
}
return n;
}
調(diào)用
array.unique()
方法二(通過sort從小到大排序优幸,然后遍歷數(shù)組比較相鄰元素是否相等)
Array.prototype.unique = function()
{
this.sort();
var re=[this[0]];
for(var i = 1; i < this.length; i++)
{
if( this[i] !== re[re.length-1])
{
re.push(this[i]);
}
}
return re;
}
調(diào)用
array.unique();
方法三(通過哈希表)
Array.prototype.unique = function()
{
var n = {},r=[]; //n為hash表,r為臨時數(shù)組
for(var i = 0; i < this.length; i++) //遍歷當前數(shù)組
{
console.log(n[this[i]])
if (!n[this[i]]) //如果hash表中沒有當前項
{
n[this[i]] = true; //存入hash表
r.push(this[i]); //把當前數(shù)組的當前項push到臨時數(shù)組里面
}
}
return r;
}
array.unique()
散列表(Hash table,也叫哈希表)婆誓,是根據(jù)關(guān)鍵碼值(Key value)而直接進行訪問的數(shù)據(jù)結(jié)構(gòu)吃环。也就是說,它通過把關(guān)鍵碼值映射到表中一個位置來訪問記錄洋幻,以加快查找的速度郁轻。這個映射函數(shù)叫做散列函數(shù),存放記錄的數(shù)組叫做散列表鞋屈。
方法四(類似于方法一)
方法一是假設(shè)當前元素的下標是否是重復的
方法四是判斷有沒有這個下標范咨,沒有返回-1故觅;
Array.prototype.unique = function()
{
var n = []; //一個新的臨時數(shù)組
for(var i = 0; i < this.length; i++) //遍歷當前數(shù)組
{
//如果當前數(shù)組的第i已經(jīng)保存進了臨時數(shù)組厂庇,那么跳過,
//否則把當前項push到臨時數(shù)組里面
console.log(n.indexOf(this[i]),n);
if (n.indexOf(this[i]) == -1) n.push(this[i]);
}
return n;
}
array.unique()