1,数组对象自带的排序方法
Array.sort()方法有面试官问到时如何实现的,实现的关键过程就是比较数组中的每一项的首个字符(将整个字符转换成string以后,将第一个字符分离出来)
2,数组去重
数组去重的关键思想是:当新数组里没有要进来的新项时,那就放进新数组里,最后返回新数组
代码:
<!DOCTYPE html>
<html><head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script>
var a=[23,12,5,78,6];
var b=['ad','d22','b22','425','ad'];
//数组自带的排序方法实现
Array.prototype.sort2=function (){
var res=[];
for(var i=0;i<this.length;i++){
for(var j=i+1;j<this.length;j++){
// console.log(this[i].toString().substring(0,1));
var a=parseInt( this[i].toString().substring(0,1) );
var b=parseInt( this[j].toString().substring(0,1) );
if( a > b ){
var flag=this[i];
this[i]=this[j];
this[j]=flag;
}
}
res.push(this[i]);
}
return res;
}
console.log(a.sort2());//12,23,5,6,78
console.log(a);//12,23,5,6,78
//正确的排序方法(也可以在.sort()方法中传入一个function compare(a,b){reuturn a-b;})
Array.prototype.mysort=function (){
var res=[];
for(var i=0;i<this.length;i++){
for(var j=i+1;j<this.length;j++){
if(this[i]>this[j]){
var flag=this[i];
this[i]=this[j];
this[j]=flag;
}
}
res.push(this[i]);
}
return res;
}
console.log(a.mysort());//5,6,12,23,78
console.log(b.mysort());//425,ad,ad,b22,d22
//对象下标(理解对象下标)
var a=new Object();
a.name="Tom";
a.sex="man";
a.age="22";
console.log(a["name"]);//Tom
console.log(a.name);//Tom
//数组去重
Array.prototype.unique3=function (){
var res=[];
var json={};
for(var i=0;i<this.length;i++){
if(!json[this[i]]){
res.push(this[i]);
json[this[i]]=1;
}
}
return res;
}
var arr=[11,22,34,'你好',55,4,'ffff','dd',11,22,34,'你好',55,4,'ffff','dd'];
console.log(arr.unique3());//11,22,34,你好,55,4,ffff,dd
</script>
</body>
</html>
3,伪数组
符合以下条件的对象称为伪数组:
1,具有length属性
2,按索引方式存储数据
3,不具有数组的push,pop等方法
如:
1,function内的arguments 。
2,通过document.forms,Form.elements,Select.options,document.getElementsByName() ,document.getElementsByTagName() ,childNodes/children等方式获取的集合(HTMLCollection,NodeList)等。
特殊写法的对象 ,如
var obj={};
obj[0] = "一";
obj[1] = "二";
obj[2] = "三";
obj.length = 3;
重新设计一下这个函数,让它直接拥有数组的方法
// 方法一、 声明一个空数组,通过遍历伪数组把它们重新添加到新的数组中
var arr = [];
for (var i = 0; i < obj.length; i++) {
arr[i] = obj[i]
}
// 方法二、使用数组的slice()方法 它返回的是数组,使用call或者apply指向伪数组
var arr = Array.prototype.slice.call(obj);