数组(Array)
数组也是一个对象,和普通对象功能类似。普通对象使用字符串作为属性名,而数组使用数字来作为索引操作。索引:从0开始的整数。数组的存储效率比较高,对属性名没有要求的时候可以使用。
基本应用
//创建数组对象
var arr = new Array();
//向数组中添加对象
//语法:数组[索引] = 值;
arr[0] = 10;
arr[1] = 33;
//如果读取不存在的索引则返回undefined
//获取数组的长度(元素的个数)可以使用length属性 语法:数组.length
console.log(arr.length);
//该方法只适用于连续的数组
//对于非连续的数组使用length,会获得数组最大的索引数+1
//修改数组的长度
arr.length = 10;
//如果修改的长度大于数组本身的长度,多余的部分将会被空出来;如果修改的小于原长度,多余的部分会被删除
//永远像数组的最后一个位置处加元素
arr.[arr.length] = 70;
数组字面量
(1)创建数组的方式
//使用数组字面量创建数组
var arr = [];
//可以在创建时就指定数组的元素
var arr = [1,2,3,4,5,6];
//使用构造函数的方式创建数组,也可以同时添加元素,将元素作为构造函数的参数传递即可
var arr2 = new Array(10,20,30);
(2) 当只有一个元素时:
arr = [10]; //创建一个数组,数组中只有一个元素10
arr2 = new Array(10); //创建一个长度为10的数组
(3)数组中的元素可以时任意数据类型
arr = ["hello",3, true, null, undefined];
//可以放对象
var obj = {};
arr[arr.length] = obj; //在数组的最后一位中放入obj
//或者
arr = [{name:"陈"},{name:"李"}];
//也可以是一个函数
arr = [function(){},function(){alert("你好");}];
//也可以直接用数组执行函数
arr[1]();
//也可以是数组
arr = [[1,2,3],[4,5,6]]; //二维数组
数组的四种方法
(1) push( ) — 向数组的末尾添加一个或更多的元素,并返回新的数组长度;可以将要添加的元素作为方法的参数传递,这些元素会自动添加到数组的末尾。
arr.push("汤普森一家", 67);
var result = arr.push("汤普森一家", 67);
console.log(result); //返回一个数字,是数组的长度
(2)pop( ) — 删除并返回数组的最后一个元素,并将删除的元素作为返回值返回
arr = ["hello",3, true, null, undefined];
arr.pop(); //一旦执行这个方法就会删除数组中的最后一个元素, 调一次删除一次
console.log(arr); //返回["hello",3, true, null]
console.log(arr.pop); 返回undefined 返回的是删掉的元素
(3)unshift( ) — 向数组的开头添加一个或更多的元素,并返回新的数组长度;和push( )方法差不多;向前插入元素后,其他元素的索引会依次调整。
(4)shift( ) — 删除并返回数组的第一个元素,并将删除的元素作为返回值返回;和pop( ) 差不多。
arr = ["hello",3, true, null, undefined];
arr.shift();
console.log(arr); //返回[3, true, null, undefined]
console.log(arr.shift); //返回“hello”
数组的遍历 — 将数组中所有的元素都取出来
var arr = ["李华","张蓝","刘红","杨紫"];
for(var i = 0; i< arr.length; i++){
console.log(arr[i]);
}
数组练习
function Person (name, age){
this.name= name;
this.age = age;
}
//修改person原型的toString()
Person.prototype.toString = function(){
return "Person[name = " +this.name+", age = " + this.age+"]"
};
//创建一些person对象
var per1 = new Person("孙悟空", 19);
var per2 = new Person("猪八戒", 8);
var per3 = new Person("唐僧", 45);
var per4 = new Person("女儿国国王", 30);
var per5 = new Person("白骨精", 109);
//创建一个数组存放对象
var perArr = [per1, per2, per3, per4, per5];
//创建一个函数可以将perArr中满18岁的提取出来,封装到一个新的数组中并返回
function getAdult(arr){ //arr是形参
//创建一个新的数组
var newArr = [];
//遍历arr,获取person中的arr对象
for(var i =0; i=18){ //arr[i]就是per1,per2...
newArr.push(arr[i]);
}
}
return newArr;
}
var result = getAdult(perArr);
console.log(result);
forEach( )方法 — 用来遍历数组,这个方法只支持IE8以上的浏览器
//forEach()方法需要一个函数作为参数
arr.forEach(function(){
});
//像这种由我们创建但是不由我们调用的函数是回调函数
//数组中有几个元素,函数就会被调用几次
arr.forEach(function(a){
console.log(a);
});
//每次执行时,浏览器就会将遍历的元素以实参的形式传递进来,可以定义行参来读取这些元素
//浏览器在回调函数中传递三个参数:1.当前正在遍历的元素 2.当前正在遍历的元素的索引 3.正在遍历的数组
slice( ) — 从某个已有的数组返回选定的元素; 该方法不会改变原数组,而是将截取到的元素封装到一个新数组中返回;
参数:1. 截取开始的位置的索引(包含开始的索引)2. 截取结束的位置的索引(不包括结束的索引),第二个参数如果不写,此时会截取从开始索引一直到最后的索引;
var arr = ["hello",3, true, null, undefined];
var result = arr.slice(0,2);
console.log(result); //返回“hello”,3
var result2 = arr.slice(1,-1); //索引可以传递一个负值,如果传递一个负值,则从后往前计算
splice( ) — 删除数组中的指定元素,并向数组添加新元素;该方法会影响到原数组,会将元素从原数组中删除,并将被删除的元素作为返回值返回
参数:1. 表示开始位置的索引 2.表示删除的数量 3.第三个参数及以后可以传递新的元素,这些元素会自动插入开始位置的索引前
该方法可以删除,替换或添加元素
var arr = ["hello",3, true, null, undefined];
var result = arr.splice(1,2);
console.log(arr); //返回"hello", null, undefined
console.log(result); //返回3,true
var result2 = arr.splice(1,2,"牛魔王",20);
console.log(result2);//返回"hello","牛魔王",20, null, undefined
数组去重练习
var arr = [1,2,3,2,1,3,4,2,5];
for(var i = 0; i< arr.length; i++){
//获取当前元素后的所有元素
for(var j = i+1; j
数组的剩余方法
(1)contact( ) — 连接两个或多个数组,并将新的数组返回;该方法不会对原数组产生影响。
var arr = ["孙悟空","沙和尚","唐僧"];
var arr2 = ["白骨精","玉兔精","蜘蛛精"];
var arr3 = ["玉皇大帝","金角大王"];
//将数组合并为同一个并返回
var result = arr.contact(arr2,arr3);
//除了可以传数组,也可以传元素
arr.contact(arr, arr2, "铁扇公主");
(2) join( ) — 将数组转换成一个字符串;该方法不会对原数组产生影响。
var arr = ["孙悟空","沙和尚","唐僧"];
var result = arr.join();
在join( )中默认是逗号隔开,但是可以指定一个字符串作为参数,这个字符串将成为数组中元素的连接符。
var arr = ["孙悟空","沙和尚","唐僧"];
var result = arr.join("hello");
console.log(result);
(3) reverse( ) — 反转数组;该方法会直接修改原数组。
(4) sort( ) — 对数组中的元素排序,默认对unicode编码排序,使用unicode则只会比较第一位数字。
var arr = ["a", "f", "z", "d", "l", "f"];
arr.sort();
console.log(arr); //从小到大排列,返回['a', 'd', 'f', 'f', 'l', 'z']
arr.reverse();
console.log(arr); //从大到小排列,返回['z', 'l', 'f', 'f', 'd', 'a']
但是我们可以自己制定排序的规则。 在sort( )中添加一个回调参数,来制定排序规则,回调函数中需要定义两个形式参数,浏览器将会分别使用数组中的元素作为实参去调用回调函数。
浏览器会根据回调函数返回的返回值来决定元素的顺序,如果返回一个大于0的值,则元素会交换位置;如果是小于0或等于0,则元素位置不变。
var arr = [5, 4, 9, 10, 6, 1];
arr.sort(function (a, b) {
// 前面的大
if (a > b) {
return 1; //对调顺序
} else if (a < b) {
return -1;
} else { return 0; }
}); //用数组中的元素反复作为实参比较
//如果想要降序排列
if (a > b) {
return -1;
} else if (a < b) {
return 1;
} else { return 0; }
//更简单的办法是返回a-b的值
var arr = [5, 4, 9, 10, 6, 1];
arr.sort(function(a,b){
return a-b; //升序排列
return b-a; //降序排列
});