一.数组的定义:两种方式
1.数组字面量var arr = [];
2.系统提供的构造方法 var arr = new Array();
数组的方法来源于Array.prototype
例一
var arr = [1,2,,,,3,4]//----不是每位都有值-稀松数组
例二
var arr = new Array(1,3,4,6,7,8);
例3
// var arr1 = new Array(10.2);//报错,长度只能识别整数
var arr = new Array(10);//创建一个长度为10的空数组,这样创建.只有一个参数的时候会被当作长度[empty*10]
var arr2 =[10];//[10]
二.数组的读和写(比较松散,基本没有报错的地方)
1.arr[num] //不可以溢出读,结果是undefined
2.arr[num]=xxx //可以溢出写
例子
var arr =[];//arr[10]=undefined
js里面的数组是基于对象的,一种特殊对象
三.数组常用方法
1.改变原数组
push/pop/shift/unshift/sort/reverse/splice
例1 push和pop此例用--var arr = [1,2]
var arr = [1,2,3,4];//数组是引用值,可以访问方法
Array.prototype.push = function() {
for(var i = 0;i <arguments.length;i ++){//遍历arguments,每个都拿出来往里面添
this[this.length] = arguments[i];
}
return this.length;
}
例2 splice方法
var arr = [1,2,3,4,5,6];
arr.splice(从第几位开始,截取多少长度,在切口处添加新的数据)
数组一般都可以带负数,在数组内部怎么实现负数
splice = function (pos){
pos += pos >0? 0:this.length;
}//-1+6=5,+length
例3 sort方法--可以排序
var arr = [3,6,7,1,2,0,-1,9];
例4 用规则排序
1.必须写两个形参
2.规则:看返回值
1)当返回值为负数时,前面的值放前面
2)当返回值为正数时,后面的数在前面
3)返回值为0时,不动
var arr = [1,5,3,8,6,10];
arr.sort(function (a,b) {
if(a - b > 0) {
return a - b;
}else {a - b < 0
return a - b;
}
});//运行完以后是一个升序arr=[1,3,5,6,8,10]
例5 --------->通用公式
var arr = [20,2,10,13,4,8,9];
arr.sort(function(a,b){
// return a-b;//升序
return b-a;//降序
})
例6,用sort可以排序,也可以乱序
var arr =[1,2,3,4,5,6,7,8,9];
arr.sort(function () {
return Math.random() - 0.5;
});
例7 按年龄排序
var cheng = {
name :"cheng",
age:18
}
var deng = {
name:"deng",
age:32
}
var zhang = {
name:"zhang",
age:20
}
var arr = [cheng,deng,zhang];
arr.sort(function(a,b) {
return a.age - b.age;
});
例8 按字节长度排序
function retBytes(str){
var num = str.length;
for(var i = 0;i < str.length; i++) {
if(str.charCodeAt(i) > 255) {
num ++;
}
}
return num;
}
var arr = ['a等','ccc从','ba吧','sdeefdsaefev','fgbvf','额eee','ddww'];
arr.sort(function (a,b) {
return retBytes(a) - retBytes(b);
});
// 2.不改变原数组
concat/join/--->split,toString,slice
concat连接两个数组
例9
var arr = [1,2,3,4,5,6];
var arr1 = [7,8,9,10];
数组toString,把数组变成字符串 例9arr.toString = "1,2,3,4,5,6"
slice(从该位开始截取,截取到该位)
var arr =[1,2,3,4,5,6];
var newArr = arr.slice(1,3);//slice不可以改变原数组,关注返回值,拿东西接收
var newArr = arr.slice(-4)//从-4+6=2位开始--->3,4,5,6
var newArr = arr.slice();//整个截取
例10
var arr = [1,2,3,4,5,6];
join可以传参数,返回字符串形式
字符串里面split可以拆分成数组
var str = arr.join("-");
split和join互逆,
例11,题
var str = "alibaba";
var str1 = "baidu";
var str2 = "tencent";
var str3 = "toutiao";
var str4 = "zijie";
var str5 = "taobao";
var arr = [str,str1,str2,str3,str4,str5];
join里面传与不传 ''的差距
console.log(arr.join());//alibaba,baidu,tencent,toutiao,zijie,taobao
console.log(arr.join(''));//alibababaidutencenttoutiaozijietaobao