最近搜寻资料时候发现了几张js知识导图,闲来无事就当温习了一下
一、创建方法
这几个使用的是Array构造函数:
空数组: var obj = new Array();
指定长度的数组:var obj = new Array(20);
指定元素的数组:var obj = new Array("red","blue","black");
另一种是使用数组字面量表示法:
三个字符串的数组:var obj = ["red","blue","green"];
空数组:var name = [];
二、基本操作
存取数组元素:
1)、单维数组:数组名[下标所索引] =》 obj[2]
;
2)、多维数组:数组名[外层数组下标][内层数组下标] =》obj[2][3]
增加数组:使用“【】”运算符指定一个新下标 =》 obj[3] = "yellow"
删除数组:delete数组名[下标] =》 delete obj[3]
;(删除之后原来元素会变成undefined)
遍历数组:for(var 数组元素变量in数组)
三、数组属性
引用数组对象的构造函数:constructor
数组的长度:length
通过增加属性和方法扩展数组定义:prototype
四、方法
1)、添加
push():在数组末尾添加数组 =》 arr.push("yellow","pupple")
unshift():在数组头部添加元素 =》 arr.unshift("green")
concat():合并两个数组 =》 arr1.concat(arr2)
2)、删除
pop():删除并返回数组的最后一个元素 =》 arr.pop()
shift():删除并返回数组的第一个元素 => arr.shift()
3)、子数组
splice(): 注意:此方法会直接修改数组本身!
PS:该方法可接受三个参数:
index(必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。)
howmany(必需。要删除的项目数量。如果设置为 0,则不会删除项目。)
item1, ..., itemX( 可选。向数组添加的新项目)
删除任意数量的项:(要删除的起始下标,要删除的项数)=》arr.splice(1,2)
表从第一个开始,删除两个元素,包括第一个
在指定位置插入指定项:(起始下标,0[不删除任何元素],要插入的项) =》arr.splice(2,0,"yellow","red")
表示在索引为2的地方插入后面两个元素
替换任意数量的项:(起始下标,要删除的项数,要插入的项)=》arr.splice(0,2,"6")
表示从索引为0的开始,选取两个元素,替换成后面的元素
slice(): 注意:此方法不会修改数组本身!
从已有数组中选取部分元素构成新数组
PS:该方法可接受两个参数:
start(必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。)
end(可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从start到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。)
=》arr.slice(0,2)
表示从索引0开始,取两个元素,注意包含第0个元素但不包含第2个元素
4)、数组排序
reverse()
颠倒数组元素的顺序=》arr.reverse()
sort()
排序数组,默认的话,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。
比较数字的话如下:
5)、数组转换
toString() 转换为字符串并返回
toLocaleString转换为本地格式字符串并返回
join()用指定分隔符分割数组并转换为字符串
6)、位置方法
indexOf && lastIndexOf
一个从数组的起始位置开始查找,一个从数组的结束位置开始查找
接受两个参数:
- 要查找的项
- 表示查找起点的索引位置
=》[2,3,4,5].indexOf(2)
如果查找得到则返回该元素的索引,找不到返回-1
7)、迭代方法
every
该方法用于检测数组所有元素是否都符合条件(通过函数提供)
- 如果数组中检测到有一个元素不满足,则整个表达式都返回false,并且剩余的元素不会检测
- 如果所有元素都满足条件,则返回true
例子:
var ages = [32,33,16,40]
function checkAdult(age){
return age >= 18;
}
ages.every(checkAdult) //false
filter
对数组中的每个元素都执行一次指定的函数(callback),并且创建一个新的数组,该数组元素是所有回调函数执行时返回值为 true 的原数组元素。
//过滤掉小于 10 的数组元素:
//代码:
function isBigEnough(element, index, array) {
return (element >= 10);
}
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
// 12, 130, 44
//结果:[12, 5, 8, 130, 44].filter(isBigEnough) : 12, 130, 44
foreach
遍历
//打印数组内容:
function printElt(element, index, array) {
document.writeln("[" + index + "] is " + element + "
");
}
[2, 5, 9].forEach(printElt);
// Prints:
// [0] is 2
// [1] is 5
// [2] is 9
//结果:
//[0] is 2
//[1] is 5
//[2] is 9
map
返回每次函数调用的结果数组
//将所有的数组元素转换为大写:
var strings = ["hello", "Array", "WORLD"];
function makeUpperCase(v)
{
return v.toUpperCase();
}
var uppers = strings.map(makeUpperCase);
// uppers is now ["HELLO", "ARRAY", "WORLD"]
// strings is unchanged
//结果:["hello", "Array", "WORLD"].map(makeUpperCase) : HELLO, ARRAY, WORLD
some
有一项返回true,则返回true
//检查是否有数组元素大于等于10:
function isBigEnough(element, index, array) {
return (element >= 10);
}
var passed = [2, 5, 8, 1, 4].some(isBigEnough);
// passed is false
passed = [12, 5, 8, 1, 4].some(isBigEnough);
// passed is true
//结果:
//[2, 5, 8, 1, 4].some(isBigEnough) : false
//[12, 5, 8, 1, 4].some(isBigEnough) : true
8)、缩小方法
reduce 从数组起始位开始遍历
reduceRight 从数组末尾开始遍历
常见场景叠加
var sum = [0, 1, 2, 3].reduce(function(acc, val) {
return acc + val;
}, 0);
// sum is 6