javascript 数组(Array对象/数组API)

1. 概述:

数组是一种数据类型(把很多数据装入一个盒子中,用的时候取出来) 字面量为[1,2,3]

2. 定义:

//字面量定义法
var arr1 = [1,2,3];
//对象定义法
var arr2 = new Array(1,2,3);
//定义数组长度
var arr3 = new Array(10);







3. 相关操作
> 获取数组长度


arr1.length

> 数组中的元素赋值

arr3[0] = "abc";

> 如果索引值超出了数组的长度,返回值是undefined

> 数组的最大索引值 = 数组的长度 - 1

> 索引值从0开始






4. 数组的遍历
var arr = new Array(1,2,3,4,5,6);
for(var i=0; i<arr.length; i++) {
     console.log(arr[i]);
}




5. Array的内置方法


① 判断数组和转换数组


instanceof  是一个关键字。 判断A是否是B类型。
布尔类型值 = A instanceof B ;



isArray()     HTML5中新增,判断是不是数组
调用者:Array 参数:变量(被检测值) 返回值:布尔类型
布尔类型值 = Array.isArray(变量) ;



toString()    把数组转换成字符串,每一项用逗号分割
字符串  =  数组.toString();



valueOf() 返回数组对象本身
数组本身 = 数组.valueOf();



join( )    将数组元素连接起来以构建一个字符串(数组转为字符串
var arr = [1,2,3];
//join会根据参数连接数组中的元素,默认用逗号连接
console.log(arr.join());//1,2,3
console.log(typeof arr.join());//String
console.log(arr.join(" "));//1 2 3
console.log(arr.join("-"));//1-2-3
console.log(arr.join("|"));//1|2|3
//无缝连接,参数用空字符串“”
console.log(arr.join(""));//123





② 数组增删和换位置(原数组将被修改)


操作(先入后出)
- push( )  在数组最后的位置添加元素(压栈),返回数组的长度
数组1改后的长度  =  数组1.push(元素1);


- pop( )  删除并返回数组的最后一个元素(弹栈)
被删除的元素  =  数组1.pop();



队列操作(先入先出)
- unshift( )  在数组头部插入一个元素
 ,返回数组的长度
数组1改后的长度  =  数组1.unshift(元素1);

shift( )  删除并返回数组中的第一个元素
被删除的元素  =  数组1.shift();



reverse( )  翻转数组(原数组将被反转,返回值也是被反转后的数组)
反转后的数组  =  数组1.reverse();



sort( )     给数组排序,返回排序后的数组。如何排序看参数。
底层是按照每个元素的首字符的Unicode编码值来排序的。
如果是对象,可以通过某个属性的比较排列顺序。
首个字符的Unicode编码值,从小到大排序。首字母相同,排第二个,以此类推。
从小到大排序后的数组  =  数组1.sort(function(a,b){
    return a-b;
});

无参:按照数组元素的首字符对应的Unicode编码值从小到大排列数组元素。
带参:必须为函数(回调函数--callback)。函数中带有两个参数,代表数组中的前后元素。如果计算后(a-b),返回值为负数,a排b前面;返回值等于0不动;返回值为正数,a排b后面。




③ 了解方法
concat( )  连接数组 
新数组 = 数组1.concat(数组2);


slice( )   从当前数组中截取一个新的数组,不影响原来的数组,参数start从0开始,end从1开始
- 如果只有一个参数,截取到最后
- 如果只有两个参数,截取到后一个参数之前一个,包左不包右
- 如果是负数,从后面截取
- 如果两个参数相等或前大后小,无意义,返回空字符串
新数组 = 数组1.slice(索引1,索引2);



splice( )  删除或替换当前数组的某些项目,参数start,deleteCount,options(要替换的项目)
 。第一个参数是指定索引值,第二个参数是删除的个数,第三个之后的参数是替换的内容。返回被删除的元素
新数组 = 数组1.splice(起始索引,删除个数,替换内容);



indexOf( )lastIndexOf(
 )   获取某个元素在数组中的索引值
如果有,返回该位置的索引值;如果没有,返回-1;数组的索引值永远不会变,两种方法查同一个元素的索引值是相同的。
索引值 = 数组.indexOf(数组中的元素); //从前往后查
索引值 = 数组.lastIndexOf(数组中的元素); //从后往前查





④ 扩展的方法(ES5
 中给数组扩充了一些方法)
遍历型方法:都会遍历数组中的每一个元素,并且提供一个回调函数来处理每一个数组元素,不会修改原数组


every()、filter()、forEach()、map()、some()
数组/boolean/无 = 数组.every/filter/forEach/map/some( function( v, i ){
    // 该函数会调用 数组.length 次
    // 数组中每一个元素都会被这个函数处理一次
    // 此函数带有两个参数
    // v 表示数组元素
    // i 表示数组元素的索引(下标)
    // 函数处理元素的办法可以由用户决定
});



every (所有):对数组中每一项运行回调函数,回调函数用于判断数组中的每个元素是否都满足条件,如果都满足就返回true,如果有一个不满足就返回false并停止遍历;不写默认返回false。
array.every(function(item,index,arr) {
});



filter(过滤):对数组中每一项运行回调函数,该函数返回由结果是true的项组成的新数组,相当于一个过滤器。
var arr = array.filter(function(item,index,arr) {
});
console.log(arr);  



forEach:遍历数组。
array.forEach(function(item,index,arr){
});



map(映射):对数组中每一项运行回调函数,返回该函数的结果组成的新数组。就是将一个数组,变成另一个数组,变化的规则由回调函数决定,将变化好的数据返回即可。
var arr = array.map(function(item,index,arr) {
    return "\"" + item + "\"";
})



some(有的):对数组中每一项运行回调函数,回调函数用于判断每一个元素是否符合某些要求,如果数组中有一个符合了,则
 some 返回 true 并停止遍历。
var b =  array.some(function(item,index,arr) {
    if (item == "ww") {
        return true;
    }
    return false;
});





⑤ 清空数组
var array = [1,2,3,4,5,6];
array.splice(0,array.length); //删除数组中所有项目(法1)
array.length = 0; //length属性可以赋值,其它语言中length是只读(法2)
array = [];  //直接赋为空数组,推荐(法2)