javascript数组
javascript也是数组也是对象。
数组构造方法: new Array()或Array(),[];
- new Array()等效于Array();
- 如果不需要初始化长度的话 arr = [];
Array
构造函数有一个很大的问题,就是不同的参数,会导致它的行为不一致。
// 无参数时,返回一个空数组
new Array() // []
// 单个正整数参数,表示返回的新数组的长度
new Array(2) // [ , ,]
// 非正整数的数值作为参数,会报错
new Array(3.2) // RangeError: Invalid array length
new Array(-3) // RangeError: Invalid array length
// 单个非正整数参数(比如字符串、布尔值、对象等),
// 则该参数是返回的新数组的成员
new Array([1]) // [Array[1]]
// 多参数时,所有参数都是返回的新数组的成员
new Array(1, 2) // [1, 2]
new Array('a', 'b', 'c') // ['a', 'b', 'c']
数组的检测:
Array.isArray 或 String.prototype.toString.call(obj) == "[object Array]";
常用方法:
1.valueOf
方法返回数组本身
2.push方法
var a = [1,2,3];
var b = [4,5,6];
Array.prototype.push.apply(a,b);
a.push.apply(a, b);
// 上面两种写法等效于
a.push(b);
3.join方法,以参数作为分隔符,将数组转化为字符串.此方法适用于类数组对象或字符串
var arr = [1,[2,3],[[4]]];
arr.join(); // 1,2,3,4
var str = "abc";
[].join.call(str, "-"); //a-b-c;
4.map方法:
var arr = [1,2,3];
arr.map = (element,index,arr)=>{return element * 2}; //[2,4,6]
5.forEach方法:
forEach方法和map方法类似,但一般不返回
var out = [];
var arr = [1,2,3];
arr.forEach(function(element,index,arr){this.push(element * 2)}, out); // [2,4,6]
6.filter方法
var arr = [1,2,3,4,5];
arr.filter((element,index,arr)=>{return element > 3}); // 4,5
arr = [1,"a",null];
arr.filter(Boolean); //[1,"a"]
filter跟forEach一样也接受第二个参数(scope)
7,some,every方法,断言数组
var arr = [1,2,3,4,5];
arr.some((element,index,arr)=>{return element > 3}); // true
8.reduce,reduceRight从左到右,从右到左处理元素
var arr = [1,2,3];
function substract(prev,cur){
return prev - cur;
}
arr.reduce(substract); // 0
arr.reduceRight(substract); // -4