1.什么是数组?
javascript中的数组相当于一个杂物箱子能够装各种各样不同的杂物(数据类型),如果想拿某个杂物(访问),需要用到下标值进行捉取.
备注:ECMAScript和其它语言的区别,在于数组中能保留任何数据类型的元素而在别的语言中一个数组就只能存其中一个数据类型
2.数组可以存放什么数据类型数据?
数组很牛叉可以装整形,浮点型,字符型,字符串,null,undefined,布尔型,对象,数组:
var arr=[1,1.1,'a','666dasdsa',null,undefined,true,{a:666},[]];
3.数组的常用方法?
3.1创建数组
//1.创建一个空数组arr
var arr=new Array();
console.log(typeof arr)//object
console.log(arr)//空数组只是声明了一个数据类型,结果:[]
//2.创建一个非空数组
var arr0=new Array('leon',28,true);
console.log(arr0)//把所有的元素都打印出来了记录着不同的数据类型的数据,结果:['leon', 28, true]
console.log(arr0[0])//数组通过下标值进行访问
//3.创建数组并开辟数组空间
var arr1=new Array(10)
console.log(arr1.length);//开辟了一个数组,数组的空间是10这样做不好是因为不知道数组中究竟有多少个元素?存在问题浪费存储空间
arr1[2]='leon';//结果:[,,leon,,,,,,,]
//4.创建一个空数组
var arr2=[];
var arr2=['123',666,];//额外的逗号会导致ie急速会出现错误 浏览器不兼容
3.2队列和栈(存和取数据的方法)
插入数据:
push:添加数据从数组的尾部添加一个数据
unshift:添加数据从下标0的位置添加一个数据
移除数据:
pop:移除数组最后一个数据
shift:移除数组下标0的数据;
队列:(后进先出,和排队思想一样)
var arrs=[];
arrs.push('我是新元素');//结果: ['我是新元素']
arrs.push('我是新元素2');//结果: ['我是新元素','我是新元素2']
arrs.shift();//结果: ['我是新元素2']
栈:(后进先出)
栈:和上子弹的想法一样,有一个子弹槽然后上子弹最先进去的子弹最后发出
var arrs=[];
arrs.push('我是新元素');//['我是新元素']
arrs.push('我是新元素2');//['我是新元素', '我是新元素2']
arrs.pop();//['我是新元素'];
网站参考:http://www.jb51.net/article/85176.htm
3.3数组排序
3.3.1数组颠倒排队
//1.reverse<逆向排序:头尾交替>
var arr=[1,2,3,4,5]
console.log(arr.reverse())//[5, 4, 3, 2, 1]
var arr=['aaaewe','bbbdsad','ccdsdsad','ddddasd']
console.log(arr.reverse())//['ddddasd', 'ccdsdsad', 'bbbdsad', 'aaaewe']
//2.sort<从小到大排序和从大到小排序和随机排序>
function sortNumber(a,b)//从小到大
{
return a - b
}
function sortNumber02(a,b)//从大到小
{
return b - a
}
var arr=[1,343,33.66,434,22,55]
console.log(arr.sort(sortNumber))//从小到大:[1, 22, 33.66, 55, 343, 434]
console.log(arr.sort(sortNumber02))//从大到小:[434, 343, 55, 33.66, 22, 1]
console.log(arr.sort(function(){
return Math.random() - 0.5
})) //数组里面元素随机排序
var arr=['a','c','b','adasd','f','e',1]
console.log(arr.sort())//首先他将数组中的英文转为keycode然后再进行排序,具体转换参考keycode的码表
keycode参考:http://www.jb51.net/article/21587.htm
手册网站:http://www.w3school.com.cn/jsref/jsref_obj_array.asp
补充:排序的方法
var arrWay={
//列表排序
listSort:function(array){
var len = array.length,d;
for(var i=0;i<len; i++){
for(j=0; j<len; j++){
if(array[i] < array[j]){
d = array[j];
array[j] = array[i];
array[i] = d;
}
}
}
return array;
},
querySort:function(arr){ //头尾对比排序,快速排序
var arrStart=0;//头部
var arrLong=arr.length-1;//尾部
var Sort=function(arrStart,arrLong){
if(arrStart==arrLong){
return;
}
var val=arr[arrStart];//获取第一个值
var start=arrStart;
var end=arrLong;
while(arrLong>arrStart){//最后的值大于下标0的值
//arrLong往前开始对比
if(arr[arrLong]>=val){
arrLong--;
}else{
arr[arrStart]=arr[arrLong];
while(arrayLong>++arrayStart){
if(arr[arrayStart]>val){
arr[arrayLong]=arr[arrayStrat];
break;
}
}
}
}
//如果第一个取出val是最小值
if(start==arrStart){
Sort(++arrStart,end);
return;
}
//最后一个位置给val
arr[arrStart]=val;
//递归;
Sort(start,arrStart);
Sort(end,arrLong);
}
Sort(arrStart,arrLong);
return arr;
},
bubbleSort:function(arr){//冒泡排序
var length = arr.length;
for (var i = length - 1; i > 0; i--){
for (var j = 0; j < i; j++) {
if (arr[j] > arr[j+1]) {
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr;
}
}
var arr=[2,3,5,2,100,300,2,2,3];
console.log(arrWay.listSort(arr));//队列排序
console.log(arrWay.querySort(arr));//快速排序
console.log(arrWay.bubbleSort(arr));//冒泡排序
参考网站:http://www.cnblogs.com/idche/archive/2011/02/16/1956397.html
3.4数组去重
//数组去重
var arrs={
delSaveVal0:function(arr){//效率低
var targetArr=[arr[0]];
for(var i=1;i<arr.length;i++){
var repeat=false;
for(var j=0;j<targetArr.length;j++){
if(arr[i]==targetArr[j]){//判断返回的结果和要判断的结果值是否相同
repeat=true;
break;
}
}
if(!repeat){
targetArr.push(arr[i]);
}
}
return targetArr;
},
delSaveVal1:function(arr){//效率高点
var arr=arr.sort();//注意一定要排序
var targetArr=[arr[0]];
for(var i=1;i<arr.length;i++){
if(arr[i]!=targetArr[targetArr.length-1]){
targetArr.push(arr[i]);
}
}
return targetArr;
},
delSaveVal2:function(arr){//效率高
var result=[];
var jsonArr={};//要明白键是唯一的那就可以知道下面的做法了
for(var i=0;i<arr.length;i++){
if(!jsonArr[arr[i]]){//1:!undefined变成true,2:
result.push(arr[i]);//目标数组
jsonArr[arr[i]]='success';//这里将arr[i]当做成键值
}
}
return result;
}
}
var arrVal = [112,112,34,'你好',112,112,34,'你好','str','str1'];
console.log('去重:'+arrs.delSaveVal0(arrVal))//112,34,你好,str,str1
console.log('去重:'+arrs.delSaveVal1(arrVal))//112,34,str,str1,你好
console.log('去重:'+arrs.delSaveVal2(arrVal))//112,34,str,str1,你好
3.5合并数组
concat方法
var arr=[1,2,3];
var arr02=[4,5,6];
arr=arr.concat(arr02);
console.log(arr)//[1,2,3,4,5,6]
3.6slice 删除元素,并向数组添加新元素。
slice方法:将会新建一个新的数组进行操作
var arr=[1,2,3,4];
console.log(arr.slice(1))
console.log(arr.slice(1,4))//slice(start,end) start表示第一个值不要,end表示这个区间内的值包含end值 结果:2,3,4
console.log(arr);
3.7splice
splice:在原来的数组中操作,该方法是可以进行删除和添加新元素
var arr=[1,2,3,4,'dasd'];
//Array.splice(开始的下标(包括0),结束的下标(如果当为0时:表示不删除任何数据),添加的值(当结束的下标为0的时候就表示不删除任何数据只添加新数据))
情形0:删除数据
arr.splice(0,3)
console.log(arr)//[4, 'dasd']
情形1:在下表0的位置插入数据
arr.splice(0,0,'我是数据1','我是数据2','我是数据3')
console.log(arr)//['我是数据1', '我是数据2', '我是数据3', 4, 'dasd']
情形2:在下标1后面添加数据
arr.splice(1,0,'我是数据4')
console.log(arr)// ['我是数据1', '我是数据4', '我是数据2', '我是数据3', 4, 'dasd']
情形3:在下标范围内的value被替换
arr.splice(0,3,666)
console.log(arr)//[666, '我是数据3', 4, 'dasd']
4.转换类型问题?
4.1数组转为字符串?
var arr=[1,2,3,4,'dasd'];
//toLocaleString():把数组转换为本地数组
console.log(arr.toLocaleString());//RS:1,2,3,4,dasd
//join:具有替换功能和转换字符串功能注意:('')如果这样的话将失去逗号
console.log(arr.join(','));//新建数组并且转换字符串RS:1,2,3,4,dasd
//toString():把数组转换为字符串,并返回结果。
console.log(arr.toString());//RS:1,2,3,4,dasd
//把数组完全转换为string [1,2,3,4,'dasd']需要配合slice(0,arr.length)
//JSON.stringify(arr).slice(1,JSON.stringify(arr).length-1)变成1,2,3,4,'dasd'但是冒号依旧保留
console.log(JSON.stringify(arr))//整个结构都变成字符串RS:[1,2,3,4,'dasd']
4.2字符串转数组?
var arr='我a都a想a玩a玩aadsaddsadewqewew';
console.log(arr.split('a'));//['我', '都', '想', '玩', '玩', '', 'ds', 'dds', 'dewqewew']
console.log(arr.split(''));//['我', 'a', '都', 'a', '想', 'a', '玩', 'a', '玩', 'a', 'a', 'd', 's', 'a', 'd', 'd', 's', 'a', 'd', 'e', 'w', 'q', 'e', 'w', 'e', 'w']
4.3 json转数组?
var arr={a:666,b:777,c:888};//对象转数组
var pushArr=new Array();
for(val in arr){
pushArr[val]=arr[val];
}
console.log(pushArr['a'])//666
console.log(pushArr)//[a: 666, b: 777, c: 888]
4.4数组转json
var arr=[1,2,3,4,'dasd'];
var jsons={};
for(val in arr){
jsons[val]=arr[val];
}
4.5数组转对象?
数组本来就是对象,typeof 看到数组是属于object.因此数组转对象和对象转数组没必要