创造数组
构造函数
在使用构造函数创建数组时如果传入一个数字参数,则会创建一个长度为参数的数组,如果传入多个,则创建一个数组,参数作为初始化数据加到数组中。
var a1 = new Array(5);
console.log(a1.length);//5
console.log(a1); //[] ,数组是空的
var a2 = new Array(5,6);
console.log(a2.length);//2
console.log(a2); //[5,6]
字面量
使用字面量方式,无论传入几个参数,都会把参数当作初始化内容。
var a2 = [5,6];
console.log(a2.length);//2
console.log(a2); //[5,6]
添加/删除元素
数组的值可以通过自然数索引访问进行读写操作,也可以通过索引来添加或删除。
var a=[1,2,3];
a[3]=4;
console.log(a);//[1, 2, 3, 4]
数组也是对象,索引只是特殊的属性,所以我们可以使用删除对象属性的方法,使用delete 删除数组元素.
delete a[2];
push/pop
push
向数组的末尾添加一个或更多元素,并返回新的长度。
var a = [1, 2, 3];
a.push(4);
console.log(a);//[1, 2, 3, 4]
pop
删除并返回数组的最后一个元素。
var a = [1, 2, 3, 4];
a.pop(3);
console.log(a);//{1, 2, 3}
shift/unshift
shift
删除并返回数组的第一个元素。
var a = [1, 2, 3, 4];
a.shift();
console.log(a);//[2, 3, 4]
unshift
向数组的开头添加一个或更多元素,并返回新的长度。
var a = [1, 2, 3, 4];
a.unshift(0);
console.log(a);//[0, 1, 2, 3, 4]
splice
splice
删除元素,并向数组添加新元素。由三个参数:
1.开始索引
2.删除元素的位移
3.插入的新元素,当然也可以写多个
splice方法返回一个由删除元素组成的新数组,没有删除则返回空数组。
删除
var a = [1, 2, 3, 4, 5];
console.log(a.splice(1,3));//[2, 3, 4]
console.log(a.length);//2
console.log(a);//[1,5]
添加
只要方法第二个参数,也就是删除动作执行的次数设为0,第三个参数及以后填写要插入内容就splice就能执行插入操作,而如果第二个参数不为0则变成了先在该位置删除再插入,也就是替换效果。
var a = [1,2,3,4,5];
a.splice(1,0,9,99,999);
console.log(a.length); //8
console.log(a);//[1, 9, 99, 999, 2, 3, 4, 5]
join(char)
把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。
var a = [1,2,3,4,5];
console.log(a.join(',')); //1,2,3,4,5
console.log(a.join(' ')); //1 2 3 4 5
slice(start,end)
slice方法用于返回数组中一个片段或子数组,如果只写一个参数返回参数到数组结束部分,如果参数出现负数,则从数组尾部计数。
var a = [1,2,3,4,5];
console.log(a); //[1, 2, 3, 4, 5]
console.log(a.slice(1,2));//2
concat(array)
concat
方法用于拼接数组,a.concat(b)返回一个a和b共同组成的新数组,同样不会修改任何一个原始数组,也不会递归连接数组内部数组。
var a = [1,2,3,4,5];
var b = [6,7,8,9];
console.log(a.concat(b));//[1, 2, 3, 4, 5, 6, 7, 8, 9]
console.log(a); //[1, 2, 3, 4, 5]
console.log(b); //[6, 7, 8, 9]
reverse()
方法用于将数组逆序,与之前不同的是它会修改原数组。
var a = [1,2,3,4,5];
a.reverse();
console.log(a); //[5, 4, 3, 2, 1]
sort
sort方法用于对数组进行排序,当没有参数的时候会按字母表升序排序。
var a=[5,4,3,2,1]
a.sort()
console.log(a) //[1, 2, 3, 4, 5]
如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:
- 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
- 若 a 等于 b,则返回 0。
- 若 a 大于 b,则返回一个大于 0 的值。
var a = [7,8,9,10,11]
a.sort(function(a,b){
if (a < b ) {
return -1
}
if (a > b ) {
return 1
}
return 0
})
console.log(a) //[7, 8, 9, 10, 11]
Array.isArray(obj)
这是Array对象的一个静态函数,用来判断一个对象是不是数组。
var a = [];
var b = new Date();
console.log(Array.isArray(a)); //true
console.log(Array.isArray(b)); //false
.indexOf(element) / .lastIndexOf(element)
两个方法用于查找数组内指定元素位置,查找到第一个后返回其索引,没有查找到返回-1,indexOf从头至尾搜索,lastIndexOf反向搜索。
var a = [1,2,3,3,2,1]
console.log(a.indexOf(2)) //1
console.log(a.lastIndexOf(2)) //4
.forEach(element, index, array)
遍历数组,参数为一个回调函数,回调函数有三个参数:
1.当前元素
2.当前元素索引值
3.整个数组
var a = new Array(1,2,3,4,5,6);
a.forEach(function(value,i,array){
array[i]= value + 1;
});
console.log(a);//[2, 3, 4, 5, 6, 7]
.every(function(element, index, array)) / .some(function(element, index, array))
这两个函数类似于离散数学中的逻辑判定,回调函数返回一个布尔值
- every是所有函数的每个回调函数都返回true的时候才会返回true,当遇到false的时候终止执行,返回false
- some函数是“存在”有一个回调函数返回true的时候终止执行并返回true,否则返回false
var a = [1, 2, 3, 4, 5, 6]
console.log(a.every(function(value, i, arr){
return e < 5
}))
console.log(a.some(function(value,i,arr){
return e > 4
}))
.map(function(element))
与forEach类似,遍历数组,回调函数返回值组成一个新数组返回,新数组索引结构和原数组一致,原数组不变。
var a = [1, 2, 3, 4, 5, 6];
console.log(a.map(function(value){
return value * value;
})); // [1, 4, 9, 16, 25, 36]
console.log(a); //[1, 2, 3, 4, 5, 6]
.filter(function(element))
返回数组的一个子集,回调函数用于逻辑判断是否返回,返回true则把当前元素加入到返回数组中,false则不加。
新数组只包含返回true的值,索引缺失的不包括,原数组保持不变。
var a = [1, 2, 3, 4, 5, 6];
console.log(a.filter(function(value){
return value % 2 == 0;
})) // [2, 4, 6]
console.log(a) //[1, 2, 3, 4, 5, 6]
.reduce(function(v1, v2), value) / .reduceRight(function(v1, v2), value)
遍历数组,调用回调函数,将数组元素组合成一个值,reduce从索引最小值开始,reduceRight反向,方法有两个参数:
- 回调函数:把两个值合为一个,返回结果
- value,一个初始值,可选
var a = [1, 2, 3, 4, 5, 6];
a.reduce(function(v1,v2){
return v1+v2;
})//21