javascript中数组去重/排序/搜索索引

作者:袖梨 2022-11-14

我总共想出了四种算法来实现这个目的:

1.

代码如下 复制代码
Array.prototype.unique1 = function()
{
var n = []; //一个新的临时数组
for(var i = 0; i < this.length; i++) //遍历当前数组
{
//如果当前数组的第i已经保存进了临时数组,那么跳过,
//否则把当前项push到临时数组里面
if (n.indexOf(this[i]) == -1) n.push(this[i]);
}
return n;
}

2.

代码如下 复制代码
Array.prototype.unique2 = function()
{
var n = {},r=[]; //n为hash表,r为临时数组
for(var i = 0; i < this.length; i++) //遍历当前数组
{
if (!n[this[i]]) //如果hash表中没有当前项
{
n[this[i]] = true; //存入hash表
r.push(this[i]); //把当前数组的当前项push到临时数组里面
}
}
return r;
}

3.

代码如下 复制代码
Array.prototype.unique3 = function()
{
var n = [this[0]]; //结果数组
for(var i = 1; i < this.length; i++) //从第二项开始遍历
{
//如果当前数组的第i项在当前数组中第一次出现的位置不是i,
//那么表示第i项是重复的,忽略掉。否则存入结果数组
if (this.indexOf(this[i]) == i) n.push(this[i]);
}
return n;
}

4//数组去重

代码如下 复制代码
Array.prototype.distinct = function(){
var filtered= [];
var _a = {};
for(var i = 0;i if(!_a[this[i]]) {//如果已经有了就不再添加
_a[this[i]] = 1;
filtered.push(this[i])
}
}
return filtered;
};

//二分法 寻找索引

代码如下 复制代码

function search (arr,item,lower,upper){
lower = lower || 0;
upper = upper || arr.length-1;
if(lower == upper){
if(item == arr[upper]){
return upper;
}else{
return -1;
}
}else{
var middle = parseInt((lower+upper)/2);
if(item > a[middle]){
return search (arr,item,middle+1,upper);
}else{
return search (arr,item,lower,middle);
}
}

}

var a = [10,15,3,4,5,6,7,8,9,3,8,9];
a = a.distinct(); //[10, 15, 3, 4, 5, 6, 7, 8, 9]
a.sort(function(a,b){ return a-b;}); //排序 [3, 4, 5, 6, 7, 8, 9, 10, 15]
alert(search(a,9)); //6

数组排序

代码如下 复制代码

var arrDemo = new Array();

arrDemo[0] = 10;
arrDemo[1] = 50;
arrDemo[2] = 51;
arrDemo[3] = 100;

arrDemo.sort(); //调用sort方法后,数组本身会被改变,即影响原数组

alert(arrDemo);//10,100,50,51 默认情况下sort方法是按ascii字母顺序排序的,而非我们认为是按数字大小排序

arrDemo.sort(function(a,b){return a>b?1:-1});//从小到大排序

alert(arrDemo);//10,50,51,100

arrDemo.sort(function(a,b){return a

alert(arrDemo);//100,51,50,10

1.数组调用sort方法后,会影响本身(而非生成新数组)

2.sort()方法默认是按字符来排序的,所以在对数字型数组排序时,不可想当然的以为会按数字大小排序!

3.要改变默认的sort行为(即按字符排序),可以自行指定排序规则函数(如本例所示)

相关文章

精彩推荐