Array整理

Javascript数组

据了解,在严格类型语言中,数组是不能随意增加元素的,但是个人来说,后端基础仅限PHP,但是PHP中,数组长度其实也是可以增加的。数组的在弱类型语言中的这种特性,其实也确实方便了太多。

数组的增删

增加

数组的增加有3个方法:

-push       添加到尾部
-unshift    添加到头部
-splice     添加到任意位置(也可以删除)
1
2
3
4
5
6
7
var Arr = [1,2,3,4,5];
Arr.push(6);
console.log(Arr);//[1,2,3,4,5,6]
Arr.unshift(0);
console.log(Arr);//[0,1,2,3,4,5,6]
Arr.splice(3,0,33);
console.log(Arr);//[0,1,2,33,3,4,5,6]

删除

对应增加,删除也是三个方法:

-pop        从尾部删除
-shift      从头部删除
-splice     指定位置删除
1
2
3
4
var Arr = [1,2,3,4,5];
Arr.pop();//[1,2,3,4]
Arr.shift();//[2,3,4]
Arr.splice(1,1);//[2,4]

数组的排序

数组的排序有两个方法

-reverse    倒序排列
-sort       按字典排列(元素视为字符)
1
2
3
4
5
6
7
var Arr = [1,2,3,4,5];
Arr.reverse();//[5,4,3,2,1]
Arr.sort();//[1,2,3,4,5];
var Arr2=[a,f,g,e];
Arr2.sort();//[a,e,f,g];
var Arr3=[1,2,3,10];
Arr3.sort()//[1,10,2,3];

从上面例子可以知道,sort这个方法,如果不传入参数,排序字符串元素的效果尚可,但是排序数字元素的效果就达不到预期。但是可以通过传入方法来纠正:

1
2
3
4
var Arr3=[1,10,2,3];
Arr3.sort(function(num1,num2){
return num1-num2
});//[1,2,3,10]

迭代(遍历)

不产生新数组

-forEach    对数组每个元素进行相关操作
-every      如果所有元素都符合判断,返回true
-some       只要有一个符合就返回true

产生新数组

-map        基本等同forEach,不同的是返回一个数组副本,而不修改原数组
-filter     筛选出符合的元素,作为数组返回
1
2
3
4
5
6
7
8
9
var a=[1,2,3,4,5];
a.forEach(function(num){console.log(num*num)});//1,4,9,16,25
console.log(a.every(function(num){return num>0});//true
console.log(a.some(function(num){return num>4});//true
console.log(a.filter(function(num){return num>4};//[5]
console.log(a.map(function(num){return num*num}))//[1,4,9,16,25]
//PS:空数组不会输出
var b=[1,2,,4,5];
b.forEach(function(num){console.log(num*num)});//1,4,16,25

数组的增强

contains 包含

1
2
3
function contains(target,item){
return target.indexOf(item)>-1;
}

max&&min

1
2
3
4
5
6
function max(arr){
return Math.max.apply(0,arr);
}
function min(arr){
return Math.min.apply(0,arr);
}

removeAt&&remove

1
2
3
4
5
6
7
function removeAt(arr,index){
return !!arr.splice(index,1).length;
}
function remove(target,item){
var index = target.indexOf(item);
return !!arr.splice(index,1).length;
}