数组
定义方式(两种):
- 数组字面量 var arr = []; --建议这一种
- 数组的构造函数形式 var arr = new Array();
区别:
var arr = [10]; //arr[0] = 1(主要),代表数组长度为1(推断)
var arr = new Array(10); //给new Array(10)传参,只传一个参数,系统会认为代表数组的长度,长度为10的稀松数组(数组里的元素个数小于数组长度)
数组的读和写:
- arr[num] // 不可以溢出写
- arr[num] = xxx; //可以溢出写
数组常用的方法:
- 改变原数组
- push,pop,shift,unshift,reverse,splice,sort
- 不改变原数组
- concat,join --> split,toString,slice
改变原数组的7个方法:
1.push
在数组的末端添加数据,(可以添加多个)
var arr = [1];
arr.push(2,3);
console.log(arr);
// [1, 2, 3]
模拟系统的push方法:
var arr = [1,2,3];
Array.prototype.push = function() {
for(var i = 0 ; i<arguments.length; i++){
this[this.length] = arguments[i];
}
return this.length;
}
2.pop
在数组的末端剪切数据,(不传参,只剪切最后一位)
var arr = [2,3,4];
arr.pop();
console.log(arr);
//[2,3]
3.unshift、shift分别对应push、pop
只不过均是在头部添加和删除
4.reverse
把原数组逆序再返回回来
5.splice
arr.splice(从第几位开始,截取多少长度,在切口处添加新的数据(任意个))
var arr = [1,2,3,5]; //在第三位加上4
结果:arr.splice(3,0,4);
arr.splice(-1,1) //从倒数第一位开始截取一位
结果:[4]
var arr = [1,2,3,4,5,6,7];
arr.splice(2,4,0,0,0,0);
console.log(arr);
//[1,2,0,0,0,0,7]
6.sort
给数组升序排序
但在排序的时候会按照字符的ascll码来判断,有时候不能实现从小到大,所以sort给我们定义接口,让我们自己来定义规则。
规则(冒泡排序):
1.必须有两个形参
2.看返回值:
(1)当返回值为负时,当前的数在前面
(2)为正数时,后面的数在前面
(3)为0时,不动
var arr = [1,4,7,8,5,2,3,6,9];
arr.sort(function(a,b){
return a - b; //升序 a - b > 0 -->a>b
return b - a; //降序
})
console.log(arr);
// 升序 [1,2,3,4,5,6,7,8,9]
// 降序 [9,8,7,6,5,4,3,2,1]
例题:将数组变成乱序的
引入Math函数的随机数,Math.random()产生(0 - 1)开区间 之间随机的数,每次逆序和正序次数随机就可以做到乱序。
例题:
var arr = [1,2,3,4,5,6];
arr.sort(function(a,b){
return Math.random() - 0.5; //得数有时是正,有时是负,所以有时升序,有时降序,意思是按升序还是降序排
});
例题:
var xiaozhang = {
name : "xiaozhang",
age : 21,
sex : "male",
}
var xiaowang = {
name : "xiaowang",
age : 22,
sex : "male",
}
var xiaoli = {
name : "xiaoli",
age : 23,
face : "abc",
}
var arr = [xiaozhang, xiaowang, xiaoli];
arr.sort(function(a,b){
return b.age - a.age; //意思是按年龄由小到大排
})
例题:
function retbytes()
var arr = ['ac','cas','sdca','cascdsa'];
arr.sort(functon(a,b){
return a.length - b.length; //意思是按字符串长度从大到小排
});
不改变原数组而改变整个数组的4个方法:
1.concat
将一个数组连接到一个数组的末端,生成一个新数组
var arr = [1,2,3];
var arr1 = [4,5,6];
console.log(arr.concat(arr1));
//[1,2,3,4,5,6]
2.join --> split
- arr.join("")
按照什么方法来合并成字符串
- 必须以字符串的形式
- 参数是什么,数组中的元素之间就按什么连接
- 不写的话,默认用逗号连接
示例:
arr = [a,b,c];
arr.join("!"); // a!b!c
arr.join("~"); // a~b~c
arr.join("^"); // a^b^c
- split
按照什么来拆分成数组
str="1-2-3-4-5-6";
str.split("-") //["1","2","3","4","5","6"]
应用:
题目:连接字符串。
如果用传统方法,因为数据是存放在栈中的,而栈内存,先进后出,会导致不停地从栈里拿进拿出,所以我们用join的方法。
var str1 = "a";
var str2 = "b";
var str3 = "c";
var str4 = "d";
var str5 = "e";
var str6 = "f";
var strFinal =[str1,str2,str3,str4,str5,str6]; //散列结构
var strFinal = arr.join(""); //最好的连接方法
console.log(str7);
//'abcdef'
3.toString
把数组变成字符串展示出来
arr.toString()
"1,2,3,4,5,6"
4.slice
可以添0、1、2个参数
- slice(从该位开始截取,截取到该位 )–>2个参数 ;
- slice(从第几位截取一直到末尾)–>1个参数;
- slice(不写参数)–>截取整个长度
必须有值接受。
2个参数:
var arr = [1,2,3,4];
var newArr = arr.slice(1,3);
console.log(newArr);
//[2,3]
1个参数:
var arr = [1,2,3,4,5,6];
var newArr = arr.slice(-4); //-4+6=2,相当于从第二位开始
console.log(newArr);
//[3,4,5,6]
0个参数:
var arr = [1,2,3,4];
var newArr = arr.slice();
console.log(newArr);
//[1,2,3,4]