数组
定义方式(两种):

  • 数组字面量 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]