1.什么是数组?
数组是值的有序集合,而且可以存放js各种数据类型,因为js是弱类型的语言,所以不像其他语言数组只能存放特定的数据类型
注意:1. ECMAScript语言中的数组是可以动态变化的(因为是js的数组的数值存储采用链式结构存储)
2.Array数组是数据的有序列表。所以数组里的数值都有特定的索引值
3.ECMAScript同一个数组中可以存储不同类型的数据;
4.每个数组都有一个length属性
2.数组的创建
1.使用new Array()方法
创建未知长度的数组 var arr1=new Array();
创建数据长度 var arr2=new Array(20);
创建存放元素的数组 var arr3=new Array(20,10,'hello',null,undefined)
2.使用Array()方法
3.使用字面量创建,也是以后最常用创建的方法
var arr4=[1,2,4];
3.数组元素的读和写
通过下标来读取数组的值 arr[5]='hello'
4.数组的长度:length属性
通过数组的length属性来获取数组的长度 arr=['h','dsa','as'];arr的长度为arr.length
5.检测数组
判断是否是数组,使用Array.isArray(要判断的变量), 但值得注意的是:(typeof 要判断变量)或(typeof(要判断的变量)格式判断的是基本数据类型,即局限性就是在于基本数据类型,引用类型都是返回object
6.数组方法
1.将数组转为字符串的方法
1>toString()方法,形如:arr.toString(),数组元素转为字符串,数组元素默认以“,”来分隔
2>join('符号'),形如:arr.join('+')使用指定符号来分隔元素
2.数组末尾操作增减
1>push()方法,形如:arr.push('新元素1','新元素二'),从数组末尾的位置添加新元素,并返回数组的长度
2>pop()方法,形如:arr.pop(),从数组末尾删除一个元素,并把删除的元素返回出来
3.数组开头操作增减
1>shift()方法,形如:arr.shift()删除数组开头第一个元素,并返回删除的元素
2>unshift()方法,形如:arr.unshift()在数组开头添加一个元素
4.concat()方法
形如:var arr1=arr.concat('数组元素',’另外一个数组’)根据现有数组创建新数组,即原数组添加元素或者一个数组而产生新的数组
5.slice()方法
形如:var arr1=arr.slice(开始下标,结束下标[可选]),注意:截取不包含结束下标,根据当前数组中一个或多个元素创建另一个数组
6.splice()方法
对数组的增删改操作,形如:arr.splice(起始下标位置,要删除的元素个数,要插入的元素) 注意:当要删除的元素个数为0,就是对数组增操作
eg.var arr1=[1,23,12,45,3];arr1.splice(2,0,'red')
var arr2=[1,23,12,45,3];arr2.splice(0,2);
var arr3=[1,23,12,45,3];arr3.splice(0,3,'green')
7.indexOf()
获取数组元素的下标,形如:arr.indexOf(要查找的元素,要搜索的起始位置[可选])
7.二维数组
数组元素其实也是一个数组
8.数组元素的遍历
使用for循环遍历
9,数组实现对数组的排序
列举常用的方法:
1>使用冒泡排序
代码如下:
//定义一个排序函数,第一个参数是需要排序的数组,第二个参数是以哪种方式排序
//true代表升序,false代表降序
function(arr,isAscend){
for(var i=0;i<arr.length-1;i++){
for(var j=0;j<arr.length-i;j++){
var temp;
if(isAscend){
if(a[j]>a[j+1]){
temp=a[j];
a[j]=[j+1];
a[j+1]=temp;
}
}else{
if(a[j]<a[j+1]){
temp=a[j];
a[j]=[j+1];
a[j+1]=temp;
}
}
}
}
return arr;
}
2>使用自定义的排序函数结合sort()实现排序
代码如下:
function sortArray(arr,isAscend){
//这是一个升序函数
function compare1(value1,value2){
if(value1>value2){
return 1;
}else if(value1=value2){
return 0;
}else{
return -1;
}
}
//这是一个降序函数
function compare2(value1,value2){
if(value1<value2){
return 1;
}else if(value1=value2){
return 0;
}else{
return -1;
}
//如果传入的参数,需要升序就调用compare1函数,否则调用compare2函数
if(isAscend){
arr.sort(compare1);
}else{
arr.sort(compare2)
}
}
}
3>快速排序算法
原理思路:
1.在数据集之中,找个基准点
2.建立两个数组,分别存储左边和右边
3.利用递归进行下次比较
function quickSort(arr){
if(arr.length<=1){ //如果数组只有一个数,就直接返回 ,递归的终止条件
return arr;
}
var num=Math.floor(arr.length/2);//找到中间的索引值,如果是浮点数,则向下取整
var newValue=arr.splice(num,1); //找到中间数的值
var left=[],right=[];
for(var i=0;i<arr.length;i++){
if(arr[i]<newValue){
left.push(arr[i]); //基准点的左边的数传到左边数组
}else{
right.push(arr[i]);
}
}
return quickSort(left).concat(newValue,quickSort(right));
}
console.log(quickSort([12,2,3,12,2,11,1,34]));