js中的数组和其他语言类型中的数组是不同的,它的每一项可以存储不同类型的数据。例如:
var arr = [1,"2",[3]]; console.log(arr[0]); //1 console.log(arr[1]); //"2" console.log(arr[2][0]); //3 console.log(arr[2]); //[3] //插一句额外的话:控制台打印出的数字和字符串呈现的颜色显示时不同的,字符串通常是黑色的,数字是浅蓝色的。有时候可以通过颜色的值判断input框中输入的是数字还是字符串
js的数组的大小可以动态调整的,即可以随着数据的添加自动变长。例如:
var Arr = []; console.log(Arr.length); //0 Arr.push(1); console.log(Arr.length); //1
数组的length属性不是只读的。因此,可以通过设置这个属性,可以从数组的末尾移除项或者添加项。
var arr =[1,2,3,4,5]; arr.length = 4; console.log(arr); //[1,2,3,4] arr[arr.length] = "helllo"; console.log(arr); //[1, 2, 3, 4, "helllo"]
检测数组:Array.isArray(value)
console.log(Array.isArray(arr)); //true
转换方法:toString(),valueOf(),join()
toString():把数组转化中的每个值得字符串形式拼接成一个以逗号分隔的字符串。
valueOf():返回的还是数组
join():可以使用不同的分隔符来构建这个字符串,jojn()方法只接受一个参数,即用作分隔符的字符串,返回所以数组项的字符串。
var arr =[1,2,3,4,"hello"]; console.log(arr.toString()); //"1,2,3,4,helllo" console.log(arr.valueOf()); //[1, 2, 3, 4, "helllo"] console.log(arr.join("||")); //1||2||3||4||helllo
栈方法:
栈是一种LIFO(last-in-first-out,后进先出)数据结构,即最新添加的项最新被移除,只发生在栈的顶部。通过push()和pop()方法。
push()可以接受任意数量的参数,逐个添加到数组的尾部,并返回修改后数组的长度。
var arr =[1,2,3,4,5]; var count = arr.push("red","green"); console.log(count); //7 console.log(arr); //[1,2,3,4,5,"red","green"]
pop()则从数组尾部移除最后一项,减少数组的长度,并返回移除的项。
var arr =[1,2,3,4,5]; var item = arr.pop(); console.log(item); //5 console.log(arr); //[1,2,3,4]
队列方法:
队列访问的规则是FIFO(先进先出)。通过unshift()和shift()方法。
unshift():在数组前端添加任意个项并返回新数组的长度。
var arr =[1,2,3,4,5]; var count = arr.unshift("red","green"); console.log(count); //7 console.log(arr); //["red","green",1,2,3,4,5];
shift():能都移除数组中的第一项并返回该项,同时数组的长度减1.
var arr =[1,2,3,4,5]; var item = arr.shift(); console.log(item); //1 console.log(arr); //[2,3,4,5];
重新排序方法:通过reverse() 和sort()。
reverse()翻转数组的顺序。
var arr =[1,2,3,4,5]; console.log(arr.reverse()); //[5, 4, 3, 2, 1]
默认情况下,sort()方法是按升序法排列数组项--即最小的在前面。为了实现排序,sort()方法会先调用数组中每个项的toString()方法,然后比较的得到的字符串,以确定排序。即使数组中的每一项是数值,sort()方法比较的还是字符串。
var arr =[0,5,10,15]; console.log(arr.sort()); //[0, 10, 15, 5]
sort()方法可以接收一个比较函数作为参数,比较函数接收两个参数,如果第一个参数应该位于第二个参数之前则返回负数,相等返回0,之后返回一个正数。
function compare(value1,value2) { if(value1<value2){ return -1; } else if(value1 > value2){ return 1; } else{ return 0; } } var arr =[0, 10, 15, 5]; arr.sort(compare); console.log(arr); //[0, 5, 10, 15]
操作方法:concat(),slice(),splice()
concat():创建一个当前数组的副本,将接收到的参数添加到这个数组的末尾,并返回新构建的数组。相当于数组的拼接
var arr =[1,2,3,4,5]; var arr2 = [6,7,8,9]; var arr3 = arr.concat('green',arr2,[10,20,30,40]); console.log(arr3); //[1,2,3,4,5,'green',6,7,8,9,10,20,30,40]; var arr4 = arr.concat(); console.log(arr4); //[1,2,3,4,5];
slice():他能够基于当前数组中的一个项或多个项创建一个新的数组。slice()方法接收一到两个参数,返回项的起始位置和结束位置。一个参数的情况下,slice()方法返回从该参数位置指定到当前数组的末尾的所有项。如果两个参数,返回的是从起始位置到结束位置之间的项--但不包括结束位置的项。
注意:slice()方法不会影响原数组。
var arr =[1,2,3,4,5]; var arr2 = arr.slice(0,3); //[1,2,3] console.log(arr2) var arr3 = arr.slice(1); //[2,3,4,5]; console.log(arr3);
console.log(arr); //[1, 2, 3, 4, 5]
splice()方法:主要用法是向数组的中部插入项。使用这种方式的用法有如下3种。
♥ 删除:可以删除任意数量的项,只需要指定两个参数:要删除的第一项的位置和要删除的项数。
var arr =[1,2,3,4,5]; console.log(arr.splice(1,1)); //[1] console.log(arr); //[2,3,4,5];
♥ 插入:可以向指定的位置插入任意数量的项,只需要提供三个参数:起始位置、0(要删除的项数)和要插入的项。如果要传入多个项,可以再传入第四,第五,以至任意多个项。
var arr =[1,2,3,4]; console.log(arr.splice(1,0,"green","blue","red","gray")); //[] console.log(arr); //[1,"green","blue","red","gray",2,3,4];
♥ 替换:可以向指定位置位置插入任意数量的项,且同时可以删除任意数量的项,只需要指定三个参数:起始位置,要删除的项数和要插入的任意数量的项。插入的项数不必和删除的项数相等。
var arr =[1,2,3,4]; console.log(arr.splice(1,2,"green","blue","red","gray")); [2,3] console.log(arr); //[1,"green","blue","red","gray",4];
位置方法:indexOf()和lastIndexOf()。这两个方法都接受两个参数:要查找的项和(可选的)表示查找起点位置的索引。其中,indexOf()从数组的开头向后开始查找,lastIindexOf()从数组的末尾向前查找。
这两个方法都返回要查找的项在数组中的位置,若没找到返回-1,。在比较第一个参数与数组中的每一项时,会用全等的操作符;也就是说,要查找的每一项必须要严格相等(===)。
var arr =[1,2,3,4,5,4,3,2,1]; console.log(arr.indexOf(4)); //3 console.log(arr.indexOf(4,4)); //5 console.log(arr.lastIndexOf(4)); //3 console.log(arr.lastIndexOf(4,5)); //5 var person ={name:'hello'}; var people = [{name:'hello'}]; var arrPerson = [person]; console.log(arrPerson.indexOf(person)); //0 console.log(people.indexOf(person)); //-1
迭代方法:every(),filter(),forEach(),map(),some();常用到的是forEach() 和 map()。对常用的解释一下:
forEach():对数组中的每一项运行传入的函数。这个方法没有返回值。
var arr =[1,2,3,4,5]; arr.forEach(function(value,index) { arr[index] = value +5; }) console.log(arr); //[6,7,8,9,10]
map():对数组中的每一项运行给定函数,返回一个数组,而这个数组的每一项都是在原始数组中的对应项上运行传入函数的结果。
var arr =[1,2,3,4,5]; var mapResult = arr.map(function(value,index) { return value*2; }); console.log(mapResult); //[2, 4, 6, 8, 10] console.log(arr); //[1, 2, 3, 4, 5]
归并方法:reduce(),reduceRight()