JS数组用法总结
01.创建数组
//创建一个元素个数为0的数组 var mArray = []; var mArray = new Array(); //创建一个元素个数为size的数组[每个数组元素的值均为"undefined"] var mArray = new Array(size); //创建数组,并使用"element_0, element_1, ..., element_n"参数列表赋值 var mArray = [element_0, element_1, ..., element_n]; var mArray = new Array(element_0, element_1, ..., element_n);
02.数组赋值
//使用下标访问赋值 //被跳过而未被赋值的元素,其值为undefined var mArray = new Array("AA"); mArray[0] = "BB"; //mArray:["BB"],mArray.length:1 mArray[1] = "CC"; //mArray:["BB", "CC"],mArray.length:2 mArray[3] = "DD"; //mArray:["BB", "CC", undefined, "DD"],mArray.length:4 //unshift方法向数组的开头添加一个或多个元素,并返回新数组的长度 //语 法:mArray.unshift(element_0, element_1, ..., element_n) var mArray = new Array("AA"); mArray.unshift("BB"); //mArray:["BB", "AA"],mArray.length:2 mArray.unshift("CC", "DD"); //mArray:["CC", "DD", "BB", "AA"],mArray.length:4 //push方法向数组的末尾添加一个或多个元素,并返回新数组的长度 //语 法:mArray.push(element_0, element_1, ..., element_n) var mArray = new Array("AA"); mArray.push("BB"); //mArray:["AA", "BB"],mArray.length:2 mArray.push("CC", "DD"); //mArray:["AA", "BB", "CC", "DD"],mArray.length:4 //使用splice方法向数组指定位置前插入一个或多个元素 //语 法:mArray.splice(index,howmany,element_0, element_1, ..., element_n) //参 数:index 必需。 // 表明添加/删除项目的位置,使用负数可从数组结尾处规定位置。 //参 数:howmany 必需。要删除的项目数量。如果设置为 0,则不会删除项目。 //参 数:element_0, element_n 可选。向数组添加的新项目。 //注 释:如果仅纯粹添加元素,则howmany的值需指定为0,此时方法返回值为"[]" var mArray = new Array("AA", "BB", "CC"); mArray.splice(1, 0, "DD", "EE"); //mArray:["AA", "DD", "EE", "BB", "CC"] //使用数组的length属性扩充数组 //设置length属性改变数组大小,如果设置的值比当前值大,数组将增大, //新的元素被添加到数组的尾部,它们的值为undefined。 var mArray = new Array("AA"); mArray.length = 3; //mArray:["AA", undefined, undefined],mArray.length:3
03.删除数组元素
//使用pop方法删除、并返回数组的最后一个元素 //语 法:mArray.pop(); //注 释:删除数组的最后一个元素,把数组长度减 1,并且返回它删除的元素的值。 //注 释:如果数组已经为空,则pop不改变数组,并返回undefined值。 var mArray = new Array("AA", "BB"); var item = mArray.pop(); //mArray:["AA"],mArray.length:1,item:"BB" var item = mArray.pop(); //mArray:[],mArray.length:0,item:"AA" var item = mArray.pop(); //mArray:[],mArray.length:0,item:undefined //使用shift方法删除、并返回数组的第一个元素 //语 法:mArray.shift() //注 释:该方法删除数组的第一个元素,把数组长度减 1,并且返回它删除的元素的值。 //注 释:如果数组已经为空,则shift不改变数组,并返回undefined 值。 var mArray = new Array("AA", "BB"); var item = mArray.shift(); //mArray:["BB"],mArray.length:1,item:"AA" var item = mArray.shift(); //mArray:[],mArray.length:0,item:"BB" var item = mArray.shift(); //mArray:[],mArray.length:0,item:undefined //使用splice方法从指定位置开始,删除指定个数的元素 //语 法:mArray.splice(index,howmany) //返回值:含有被删除的元素的数组 //注 释:如果不指定howmany的值,表明删除包含[index]之内及其以后所有的元素 var mArray = new Array("AA", "BB", "CC", "DD", "EE"); var ret = mArray.splice(1, 2);//mArray:["AA", "DD", "EE"],ret:["BB", "CC"] var ret = mArray.splice(1); //mArray:["AA"],ret:["DD", "EE"] //使用数组的length属性截断数组 //设置length属性改变数组大小,如果设置的值比其当前值小,数组将被截断,丢失尾部元素 var mArray = new Array("AA", "BB", "CC", "DD", "EE"); mArray.length = 2; //mArray:["AA", "BB"],mArray.length:2
04.数组元素的遍历访问
var mArray = new Array("AA", "BB", "CC", "DD", "EE"); //使用数字下标来循环输出数组中的元素 for (var i = 0; i < mArray.length; i++) { console.log(mArray[i]); } //使用 For...In 声明来循环输出数组中的元素 for (var i in mArray) { console.log("mArray[" + i.toString() + "] =", mArray[i]); }
05.数组操作
//使用slice截取数组 //语 法:mStart.slice(start, end) //参 数:start 必需,规定从何处开始选取。 // 如果是负数,那么表明它从数组尾部开始算起的位置。 // 也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。 //参 数:end 可选。规定从何处结束选取。 // 该参数是数组片断结束处的数组下标。 // 如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。 // 如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。 //返回值:返回一个新数组,包含从start到end(不包括该元素)的mArray中的元素。 //注 释:该方法并不会修改数组,而是返回一个子数组。 //注 释:如果end未被规定,该方法会选取从start到数组结尾的所有元素。 var mArray = new Array("AA", "BB", "CC", "DD", "EE"); var sArray = mArray.slice(1, 3); 此时mArray的值为:["AA", "BB", "CC", "DD", "EE"] 此时sArray的值为:["BB", "CC"] //使用concat方法接两个或多个数组或者元素 //语 法:mArray.concat(element_0, element_1, ..., element_n) //参 数:element_X 该参数可以是具体的值,也可以是数组对象,可以是任意多个。 //返回值:返回一个新的数组。 //注 释:该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。 var mArray = new Array("AA", "BB"); var sArray = mArray.concat("CC", "DD", ["EE"], ["FF", "GG"], "HH"); 此时mArray的值为:["AA", "BB"] 此时sArray的值为:["AA", "BB", "CC", "DD", "EE", "FF", "GG", "HH"]
06.数组深拷贝
//使用slice我们可以构建一个深拷贝的新数组: var mArray = new Array("AA", "BB", "CC", "DD", "EE"); var sArray = mArray.slice(0); mArray[0] = "FF"; sArray[0] = "GG"; 此时mArray的值为:["FF", "BB", "CC", "DD", "EE"] 此时sArray的值为:["GG", "BB", "CC", "DD", "EE"] //使用concat也可以达到深拷贝的目的: var mArray = new Array("AA", "BB", "CC", "DD", "EE"); var sArray = mArray.concat(); mArray[0] = "HH"; sArray[0] = "II"; 此时mArray的值为:["HH", "BB", "CC", "DD", "EE"] 此时sArray的值为:["II", "BB", "CC", "DD", "EE"]
07.数组排序
//使用reverse方法反转数组中元素的顺序 //语 法:mArray.reverse() //注 释:该方法会改变原来的数组,而不会创建新的数组 var mArray = new Array("AA", "BB", "CC", "DD", "EE"); mArray.reverse(); //mArray:["EE", "DD", "CC", "BB", "AA"] //使用sort方法对数组的元素按给定的排序函数进行排序 //语 法:mArray.sort(sortby) //参 数:sortby 可选。规定排序顺序。必须是函数。 //返回值:对数组的引用。请注意,数组在原数组上进行排序,不生成副本。 //注 释:如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序。 //注 释:如果想按照其他标准进行排序,就需要提供比较函数 // 该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字: // 比较函数应该具有两个参数 a 和 b,其返回值规定如下: // 若 a 不等 b,如果a需在前就返回小于0的值,反之就返回大于0的值 // 若 a 等于 b,则返回0 var mArray = new Array("EE", "CC", "DD", "AA", "BB"); function sortAscending(a, b) { //该函数的作用使得数组中的元素按递增的顺序排序 return (a > b)?1:-1; } mArray.sort(sortAscending); //mArray:["AA", "BB", "CC", "DD", "EE"] var mArray = new Array("EE", "CC", "DD", "AA", "BB"); function sortDecreasing(a, b) { //该函数的作用使得数组中的元素按递减的顺序排序 return (a > b)?-1:1; } mArray.sort(sortDecreasing); //mArray:["EE", "DD", "CC", "BB", "AA"]
08.数组其他方法
//使用join方法把数组中的所有元素放入一个字符串 //语 法:mArray.join(separator) //参 数:separator 可选,指定要使用的分隔符。 // 如果省略该参数,则使用逗号作为分隔符。 //返回值:返回一个字符串。 // 该字符串是通过将数组中每个元素转换为字符串, // 如果是复杂类型,调用相应的toString函数, // 然后把这些字符串连接起来,在两个元素之间插入separator字符串而生成的。 简单类型示例: var mArray = new Array("AA", "BB", "CC", "DD", "EE"); var str = mArray.join("#"); //str:"AA#BB#CC#DD#EE" 复杂类型示例: function testItem(a, b) { this.a = a; this.b = b; } testItem.prototype.toString = function () { return "{" + this.a + "|" + this.b + "}"; } var aa = new testItem("AA", "BB"); var bb = new testItem("CC", "DD"); var mArray = new Array(aa, bb, "EE", "FF"); var str = mArray.join("#"); //str:"{AA|BB}#{CC|DD}#EE#FF"
//当作为函数参数传递时,作为引用参数 var mArray = new Array("AA", "BB"); function demoFunc(arr) { //arr作为传入的数组类型,函数内直接对原数组操作 arr.push("CC", "DD", "EE"); } demoFunc(mArray); //mArray:["AA", "BB", "CC", "DD", "EE"]
参考文档
1.http://www.w3school.com.cn/js/js_obj_array.asp2.http://www.w3school.com.cn/jsref/jsref_obj_array.asp