一、创建数组的方法
//利用构造函数
var colors = new Array(可以传参数也可以不传);
//数组字面量
var names = [];
var values = [1,2,3];
二、检测数组的方法
Array.isArray()方法
最终确定某个值到底是不是数组,不受执行环境影响
if(Array.isArray(value)){
//对数组执行某些操作
}
instanceof方法
if(value instanceof Array){
//对数组执行某些操作
}
假定只有一个全局执行环境
三、数组的常用方法
(一)栈和队列方法
1..arr.push()/arr.unshift() //给数组向后/前添加数据,这两个方法的返回值是新数组的长度,ie8以下不支持unshift的返回值
2.arr.pop()/arr.shift() //把数组最后/最前的数据删除,这两个方法的返回值是被删除的数据
(二)重排序方法
1.sort()——内部是根据冒泡法排序的,不断比较两个数的大小。默认机制按照字符串把内容按照顺序排列(Unicode 编码),因此排序数字时会出错
如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:
若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
若 a 等于 b,则返回 0。
若 a 大于 b,则返回一个大于 0 的值。
- 正序:
b.sort(function(a,b){
return a-b;//升序
})
倒序:
``` b.sort(function(a,b){ return b-a; }) ```
乱序
b.sort{function(){ Math.round(Math.random())//0,1随机 Math.round(Math.random()*a) //0~a随机 Math.round(Math.random()*(a-b)+b)//b~a随机 }}
reverse()
reverse()方法就是把数组倒置。
(三)操作方法
1.concat()
concat()方法是用来把当前的数组和另一个数组连接起来,并返回一个新的数组的。
2.slice()------数组截取
Array.slice()方法返回指定数组的一个片段或子数组。它的两个参数分别指定了片段的开始和结束位置。返回的数组包含第一个参数指定的位置和所有到但不包括第二个参数指定位置的所有数组元素,如只指定一个参数则返回第一个参数指定位置到数组结尾的所有元素。如参数中出现负数,它表示相对于数组中最后一个元素的位置。例如参数-1表示倒数第一个元素。
3.splice()-----删除、替换、添加,splice()返回一个由删除元素组成的数组,或者如果没有删除
元素就返回一个空数组。
- 删除:splice(a,b)a是删除第一项序号,b表示删除的数量,缺省第二个数据会删除
- 替换:splice(a,b,c)a是替换的起点项,b表示删除的数量,c及c后面表示要加什么数据或多个数据
- 添加:splice(a,0,c)a是添加的起点项,0表示不删除,c及c后面表示要加什么数据或多个数据—加在a前面
<script>;
var a = [1, 2 , 3, 4, 5, 6, 7, 8];
//a.splice(4); //返回[5, 6, 7, 8],a是[1, 2, 3, 4]
a.splice(1, 2); //返回[2, 3],a是[1,4,5,6,7,8]
console.log(a.splice(1, 1)); //a是[1,3,4,5,6,7,8],返回2
console.log(a);
</script>
小方法:
从数组的末尾删除一项,有哪些方法?
ary.length--
ary.length-=1
ary.length = ary.length-1
ary.pop()
ary.splice(ary.length-1,1)
给数组末尾增加一项
ary.push()
ary[ary.length] = XXXX
ary.splice(ary.length,XXX);
③典型应用
A.数组去重:
- 双重循环
for(var i=0;i<arr.length;i++){
for(var j=i+1;j<arr.length;j++){
if(arr[i]==arr[j]){
arr.splice(j,1);
j--;
}
}
}
- 先排序,重复的数字会排列在一起,然后让相邻项进行比较,相同删除其中一个
代码省去排序过程
for(var i=0;i<arr.length;i++){
if(arr[i] == arr[i+1]){
arr.splice(i,1);//删除前边的重复值
i--;//防止数组塌陷,要保证i值不动
}
}
(四)位置方法
1.indexOf()方法
接收两个参数:要查找的项和查找起点的索引,从数组开头向后找
2.lastIndexOf()方法
接收两个参数:要查找的项和查找起点的索引,从数组末尾向前找
两种方法都采用全等操作符
(五)迭代方法
- every():对数组的每一项运行给定函数,该函数对每一项都返回true,则返回true
- filter():对数组的每一项运行给定函数,返回函数会返回true的项组成的数组
- forEach():对数组的每一项运行给定函数,与for用法相同
- map():对数组的每一项运行给定函数,返回每次函数运行的结果组成的数组
- some():对数组的每一项运行给定函数,函数对任一项返回true,则返回true
map()方法
array1.map(callbackfn[, thisArg])
回调函数的语法:
callbackfn(value, index, array1)
经典问题:为什么 [“1”, “2”, “3”].map(parseInt) 返回 [1,NaN,NaN]?
四、伪数组
符合以下条件的对象称为伪数组
1,具有length属性
2,按索引方式存储数据
3,不具有数组的push,pop等方法
伪数组转化为真正的数组
(function(){
console.log(arguments instanceof Array); // false
var argsArray = Array.prototype.slice.call(arguments);
console.log(argsArray instanceof Array); // true
}());