JavaScript 数组创建
一维数组
var arr = [] // 空数组
var arr = [1,2,3,4] // 数组字面量
var arr = new Array() // 空数组
arr[0] = 1
arr[1] = 2
var arr = new Array(20) //创建一个有20个空间大小的数组
var arr = new Array(1,2,3,4) //创建数组,包含四个元素
二维数组
var arr = new Array()
arr[0] = [1,2,3]
arr[1] = [3,2,1]
// 一般多维数组会用循环(比如for)来构建
数组方法
arr = [1,2,3,4,5]
arr.join(separator)——连接
返回以separator为间隔的字符串,原数组不变
arr.join("-") //返回值1-2-3-4-5
arr.push(item,[items])——末尾添加
可输入多个元素 ,修改数组本身,返回 修改后数组长度
arr.push(4,3,2,1) //返回9
arr.pop()——删除末尾元素
无参数,返回被删除元素,数组长度改变
arr.pop() // 返回 5
arr.shift()——删除第一个元素
返回被删除元素,数组长度改变
arr.shift() // 返回1
arr.unshift(item,[items])——数组首位添加元素
可添加多个元素,返回增加后的数组长度
arr.unshift(-1,0) // 返回7
arr.reverse()——反转数组
返回被反转顺序的数组,原数组改变
arr.reverse() //返回[ 5, 4, 3, 2, 1 ]
arr.concat(items,[items])——连接元素
参数任意,无参数时返回原数组副本,否则将参数添加进数组副本末尾并返回该副本,原数组不变
注意:若参数有数组,一位数组将被划分为独立的项再进行添加,二维数组的情况只有第一层数组会被拆分,第二层数组以数组的形式被添加
arr.concat() //返回[ 5, 4, 3, 2, 1 ]
arr.contact("last",["add","and",[11,11,11]])
//返回 [ 1, 2, 3, 4, 5, 'last', 'add', 'and', [ 11, 11, 11] ]
arr.sort([compareFunction])——排序
无参数时默认升序排序,添加compareFunction比较函数,函数中将两个值进行比较,第一个值位置在前时返回负数,相等返回0,靠后返回正数。
降序(示例)
function compareFunction(value1,value2){
if(value1 > value2) return -1
if(value1 < value2) return 1
if(value1 == value2) return 0
}
arr.sort(compareFunction) //返回[ 5, 4, 3, 2, 1 ]
arr.slice(startIndex,endIndex)——截取数组
截取开始下标和结束下标包含的项,不包括结束下标的项,省略结束下标参数时默认截取到最后一个字符串
结束下标为负时,设结束下标为-1,则截取的最后一个数的位置是倒数第2个(2 = |-1|+1)
arr.slice(1) //返回[ 2, 3, 4, 5 ]
arr.slice(1,4) //返回[ 2, 3, 4 ]
arr.slice(1,-1) //返回[ 2, 3, 4 ]
arr.splice()——切片——删除、插入、替换
始终返回被删除的项
删除——arr.splice(stratIndex,length) 删除从下标为startIndex开始的length个项
arr.splice(0,2) //删除前两项 返回[ 1, 2 ]
插入——arr.splice(start,0,[items])——在start处添加【items】,删除0项
arr.splice(1,0,-1,-1) //在第二位添加两个项,-1,返回[]
替换——在被删除的地方插入新值就可以了arr.splice(start,length,[items])
arr.splice(0,2,-1,-1) //
arr.indexOf(item,start) arr.lastIndexOf(item,start)——查找
输入要查找的项和开始查找的起点位置索引【可选】,首次匹配成功返回匹配项索引并结束匹配,否则返回-1
arr.indexOf(5) //返回4
数组遍历
forEach
arr.forEach(function(item,index,arrSelf){})
无返回值,原数组不变
给定匿名遍历函数,包含三个参数——每一次遍历的数组项,该项的索引,数组本身
arr.forEach(function(item,index,arrSelf){
console.log("index:"+index+" value:"+item)
})
输出:
index:0 value:1
index:1 value:2
index:2 value:3
index:3 value:4
index:4 value:5
map
arr.map(function(item,index){return})**——映射
遍历数组每一项,每一次返回值组成新的数组,原数组不变
arr.map(function(item,index){
console.log("index="+index+"__"+"item="+item)
return item-1
})
输出
index=0__item=1
index=1__item=2
index=2__item=3
index=3__item=4
index=4__item=5
[ 0, 1, 2, 3, 4 ]
filter
arr.filter(function(item,index){reutn ture/false})——过滤
返回满足过滤条件组成的数组,原数组不变
arr.filter(function(item,index){
return item>2
})
返回[3,4,5]
every()
arr.every(function(item,index){return true/false}):判断数组中每一项都是否满足条件,只有所有项都满足条件,才会返回true。
arr.every(function(item,index){
console.log("index="+index+"__"+"item="+item)
return item>2
})
返回
index=0__item=1
false
some
arr.some(function(item,index){return false/true})
判断数组中是否存在满足条件的项,只要有一项满足条件,就会返回true。
arr.some(function(item,index){
console.log("index="+index+"__"+"item="+item)
return item>1
})
返回
index=0__item=1
index=1__item=2
true
归并
reduce()和 reduceRight()
给定一个函数和一个归并基础值,每一次返回的值作为下一次的prevSub
var sum = arr.reduceRight(function(prevSum, cur, index, array){
return prevSum * cur;
},10);
console.log(sum); //1200
运算过程
10 * 5 * 4 * 3 * 2* 1 = 1200