数组:可以保存一组数据
一、创建数组:
1、方式一:构造函数创建
//使用new关键字创建数组
var arr = new Array( );
//console.log(arr); -> [ ]
var arr = new Array(1,2,'3',true);
//console.log(arr); -> [1,2,'3',true]
//如果只有一个参数,且参数类型为数字,则表示数组长度
var arr = new Array(3); //表示创建一个元素数量为3的数组
console.log(arr); //[, ,]
console.log(arr[0]); //undefined
2、方式二:字面量方式创建(一般用这种方式创建)
var arr = [ ];
//console.log(arr); // [ ]
//console.log(typeof arr); //object
var arr = [ 2, 3, true, 'hello'];
console.log(arr); //[2, 3, true, 'hello'];
二、数组的下标
1、利用数组的下标可以获取和修改数组中的元素
var arr = [ 3, 4 ];
console.log( arr[0] ); //3 第一个元素,下标是0
console.log( arr[1] ); //4
console.log( arr[2] ); //undefined -> 下标越界
//数组越界: 超出数组的下标范围
//数组的最后一个元素: arr( arr.length-1] );
数组的属性: length 表示数组的长度,数组的元素个数,(可读可写);
var arr = [1,2,3]; -> arr.length = 3;
//给数组末尾加一个元素: arr[ arr.length ] = 5;
2、数组的遍历:
var arr = [ 1,3,4,5,6 ];
for(var i=0; i<arr.length; i++){
console.log( arr[i] );
}
// for-in 循环 :可以遍历数组和对象,多用来遍历对象;
var arr = [1,2,3,5,6];
for (var i in arr){
//默认从头遍历到尾
console.log( arr[ i ] );
}
var obj = { name:'张三', age:22}
for((val, key) in obj){
console.log(val,key);
}
三、数组的方法:
var arr = [1, 3, 4];
1、push( ); 给数组末尾添加元素 arr.push(6); (返回值是新的数组长度,一般不用)
2、pop( ); 删除数组的最后一个元素 arr.pop( ); (返回值是删除的元素,一般不用)
【栈方法: push( ) 和 pop( ) ,栈是一种数据结构(后进先出);】
3、shift( ); 在数组开头删除元素 arr.shift( );(返回值为删除的元素,一般不用)
4、unshift( ); 在数组开头添加元素 arr.unshift( );
【队列方法:push( ); shift( );】
5、reverse( ) :倒序(翻转), 会改变原素组
6、sort( ): 升序排序
//给sort()传递一个函数参数(不是调用函数参数),为sort定制排序规则
function fn(a, b){
// a是数组前面的数,b是数组后面的数,如果前面的数大于后面的数,返回是否交换(返回正数表示交换)
//if( a<b) { return 1;} //表示降序
if( a > b) { return 1; } //表示升序
}
var arr = [11, 2, 3, 1, 20];
arr.sort( fn );
console.log( arr ) //[ 1,2,3,11,20 ]
7、concat( ): 拼接元素,不会改变元素组,会返回新数组(参数可以是元素,也可以是数组);
var arr = [1,2,3];
var arr2 = arr.concat(4,5);
arr=[1,2,3]; arr2=[1,2,3,4,5];
8、slice( ): 截取数组的一部分,不会改变原数组,会返回新数组
一个参数(数值):表示下标(从当前下标截取到结束位置)
两个参数(数值):表示下标(截取的是从第一个下标开始,到第二个下标结束,左闭右开)
9、splice( ):截取数组,会改变原数组(能对数组进行增、删、改)
①删除操作:必须是两个参数,且第二个参数不为零; 第一个参数表示开始下标,第二个参数是截取的长度
var arr = [ 1, 2, 3, 4, 5, 6, 7, 8 ];
var arr2 = arr.splice(2, 4);
console.log( arr ); //[ 1, 2, 7, 8 ];
console.log( arr2); //[ 3, 4, 5, 6 ];
②插入操作:需要至少三个参数,且第二个参数要为零; 第三个及以后的参数表示插入的内容
var arr = [ 1, 2, 3, 4, 5, 6, 7, 8 ];
arr.splice(2, 0, "hello", "world" );
console.log( arr ); // [ 1, 2, hello, world, 3, 4, 5, 6, 7, 8 ]
③替换操作(修改):需要至少三个参数,且第二个参数不为零;
var arr = [ 1, 2, 3, 4, 5, 6, 7, 8 ];
arr.splice( 2, 3, "hello", "world" );
console.log( arr ); // [ 1, 2, hello, world, 6, 7, 8 ]
扩展:查询:循环遍历,通过下标;
10、indexOf( ):查找数组中第一次出现指定元素的下标,如不存在返回-1 ( 查找数组中是否存在某个数 )
var arr = [ 1,2,3,4,5,6,3,4 ];
var index = arr.indexOf(3);
console.log(index) //2 数组中第一次出现数字3的下标
11、lastIndexOf( ): 数组中最后一次出现的位置
11、join( ): 将数组中的所有元素用指定的符号连起来,默认用逗号连接
var arr = [ 1,2,3,4,5 ]
var str = arr.join('-');
console.log(str); // 1-2-3-4-5
四、冒泡排序
var arr = [6, 8, 2, 9, 1, 4, 7, 12, 3 ];
for(var i=0; i<arr.length-1; i++){
for( var j=0; j<arr.length-1-i; j++){
if(arr[j] > arr[j+1]){ //从小到大排序
var temp = arr[j];
arr[ j ] = arr[ j+1 ];
arr[ j+1 ] = temp;
}
}
}
console.log(arr);