JavaScript中的数组
数组这个概念没什么难懂的,一组数据的组成的一个集合,只不过这个集合是有序的,我们只需要按照序号存取数组就可以了,主要还是了解一下数组的各种用法。下面的内容其实就是《JavaScript权威指南》中数组一章的精简版,本文借此将数组的知识过了一遍,对数组有一个整体的掌握,又可以日后当作工具查阅。
1.数组基础
创建数组
以下为数组创建的各种情况,这种偏实用性的知识还是自己敲一遍,敲一遍熟悉了。
var a = [1,2,3];//common array
var b = [];//empty array
var c = [1,true,'a'];//array with diffrent type data;
var d = 11;
var c = [d,d+1,d+3];
var e = [[1,{x:1,y:2}],[2,{x:2}]];
var f = [1,,3];//one of three elements is undefined
var a = new Array();
var b = new Array(10);//10 is length of array
var c = new Array(1,2,3,4,"dafd");
数组元素读写
var a = ["world"];//first element a[0]="world"
var value = a[0];//read first element
a[1] = 3.14;
i=2;
a[i]=3;//a[2]==3(thirst element)
a[i+1]=4;
稀疏数组
稀疏数组就是包含从0开始的不连续索引的数组。
a = new Array(5);
a = [];
a[1000] = 0;
数组的length属性值代表了数组中元素的个数,要是length大于数组中元素的个数,那么这个数组就是稀疏的。用稀疏数组还不如直接用对象,我觉得这个在真正编码过程中会很少用到吧。
数组长度
length是数组的属性,代表了数组中元素的个数。
a = [1,2,3,4];
a.length = 4;
[1,2,4].length = 3;
数组中元素的添加和删除
最简单的添加方法
a = [];
a[0] = 'a';
a[1] = 'b';
push()添加
在数组尾部添加元素
a = [];
a.push('a');//a = ['a'];
a.push('b','c');//a = ['a','b','c'];
delete删除元素
delete不会改变数组的长度
var a = [1,2,3];
delete a[1];//a = [1,undefined,3]
pop()和shift()删除元素
pop()函数可以删除数组尾部元素并返回值;
shift()函数可以删除数组头部元素并返回值;
a = [];
a.push('a');//a = ['a'];
a.push('b','c');//a = ['a','b','c'];
数组遍历
数组遍历其实还是结合之前写的JavaScript中的语句中的循环语句比较清楚。
var a = [1,2,4,5];
var b = [];
var c;
for (var i = 0;i < a.length;i++){
b[i] = a [i];
}
for item in a{
var value = a[item];
}
a.forEach(function(x){
c +=x;
})
console.log(c);//=>12
多维数组
先简单的理解二维数组,其实就是普通数组的每一个元素也是个数组,那么三维数组就是数组的元素是数组,子数组的元素还是数组。
var a = new Array(10);
for (var i = 0;i < a.length;i++){
a[i] = new Array(10);
}
for (var row = 0;row < a.length;row++){
for (var col = 0;col < a[row].length;col++){
a[row][col] = row*col;
}
}
2.数组方法
ES3中的数组方法
join()
将数组中的所有元素转化成字符串拼接在一起
var a = [1,2,3];
a.join();//=>'1,2,3'
a.join(" ");//=>'1 2 3'
a.join("");//=>'123'
var b = new Array(10);//empty
b.join('-');//=>'---------'
reverse()
返回倒序的数组
var a = [1,2,3];
a.reserve();//=>[3,2,1]
sort()
为数组排序,元素为字母就按字母表顺序,undefined元素会排到最后,想要按其他顺序排序,可以在sort的参数里设置排序条件
var a = ['banana','apple','cherry'];
a.sort();//=>['apple','banana','cherry']
var a = [33,4,1111,222]
a.sort();//=>[1111,222,33,4]
a.sort(function(a,b){
return a-b; //=>[4,33,222,1111]
})
concat()
拼接数组
var a = [1,2,3];
a.concat(4,5);//=>[1,2,3,4,5]
a.concat([4,5]);//=>[1,2,3,4,5]
a.concat([4,5],[6,7]);//=>[1,2,3,4,5,6,7]
a.concat([4,[5,[6,7]);//=>[1,2,3,4,5,[6,7]]
slice()
返回指定数组的一个片段或者子数组
var a = [1,2,3,4,5];
a.slice(0,3);//=>[1,2,3] 包含参数1但不包含参数2
a.slice(3);//=>[4,5]
a.slice(1,-1);//=>[2,3,4] -1表示倒数第1个
a.slice(-3,-2);//=>[3]
splice()
插入或删除数组元素的通用方法:第一个参数指定起始位置,第二个参数个数,不写默认到尾部。
//删除
var a = [1,2,3,4,5,6,7,8];
a.splice(4);//=>返回[1,2,3,4] a=[5,6,7,8]
a.splice(1,2);//=>返回[2,3] a=[1,4]
a.splice(1,1);//=>返回[4] a=[1]
//增加
var a = [1,2,3,4,5];
a.splice(2,0,'a','b');// 删除0个,插入2个 =>返回[] a=[1,2,'a','b',4,5]
a.splice(2,2,[1,2],3);//=>返回['a','b'] a=[1,2,[1,2],3,3,4,5]
push() 和 pop()
在数组尾部操作
var stack = [];
stack.push(1,2);//stack = [1,2] return 2(数组长度)
stack.pop();//stack = [1] return 2
stack.push(3);//stack = [1,3] return 2
stack.pop();//stack = [1] return 3
unshift() 和 shift()
在数组头部操作
var a = [];
a.unshift(1);//a = [1] return 1
a.unshift(22);//a = [22,1] return 2
a.shift();//a = [1] return 22
toString() 和 toLocalString()
toLocalString()是toString()的本地化版本?
[1,2,4].toString()//=>'1,2,4'
['a','b','c'].toString()//=>'a,b,c'
[1,[2,'c']].toString()//=>'1,2,c'
ES5中的数组方法
forEach()
forEach()接受一个函数作为参数,该函数接受3个参数:数组元素,元素索引和数组本身。
var a = [1,2,3,4,5];
var sum = 0;
a.forEach(function(value){
sum += value;//=>sum == 15;
})
a.forEach(function(v,i,b){
b[i] = v+1;//=>[2,3,4,5,6]
})
map()
map()将调用的数组的每个元素传递给指定的函数并返回一个数组,它包含数组的返回值。
var a = [1,2,3];
a.map(function(x){
return x*x;//=>[1,4,9] 不修改原数组
})
filter()
filter()接受一个函数参数,返回的是函数参数所规定的返回的调用数组的子集。
var a = [1,2,3];
a.filter(function(x){
return x<2;//=>[1] 不修改原数组
})
every() 和 some()
every()表示对于任意元素的逻辑判定;
some()表示对于存在元素的逻辑判定。
var a = [1,2,3,4,5];
a.every(function(x){
return x<10;//=>true
})
a.every(function(x){
return {x % 2 === 0};//=>false
})
a.some(function(x){
return {x % 2 === 0};//=>true
})
reduce() 和 reduceRight()
使用指定的函数将数组元素进行组合生成单个值,接受两个参数,参数一为执行化简操作的函数,参数二(可选)传递给函数的初始值。
reduceRight()将索引变为从高到低,功能是一样的。
var a = [1,2,3,4,5];
var sum = a.reduce(function(x,y){
return x+y;//数组求和
},0)
indexOf() 和 lastIndexOf()
接受一个参数,找到数组中和参数一样的元素的索引,indexOf()返回第一个,lastIndexOf()返回第二个。
var a = [0,1,2,1,0];
a.indexOf(1);//=>1
a.lastIndexOf(1);//=>3