JavaScript对象编程(四)
数组的方法(二)
数组转字符串
toString()
把数组转换成数组值(逗号分隔)的字符串
var fruits = ["Banana", "Orange", "Apple"];
var str = fruits.toString() //str的值是“Banana,Orange,Apple”, 原数组fruits不变
join()
把数组转换为数组值(指定分隔符分隔)的字符串
var fruits = ["Banana", "Orange", "Apple"];
var str = fruits.join("|") //str的值是“Banana|Orange|Apple”, 原数组fruits不变
当join()没有传入参数时,使用默认分隔符 逗号
合并数组
concat()
合并现有数组来创建一个新数组
var arr1 = ["Banana", "Orange"];
var arr2 = ["Apple", "Mango"];
var newArr = arr1.concat(arr2)
//newArr为["Banana", "Orange", "Apple", "Mango"] 原数组arr1,arr2不变
var arr1 = ["Banana", "Orange"];
var newArr = arr1.concat("Apple", "Mango")
//newArr为[“Banana”, “Orange”, “Apple”, “Mango”] 原数组arr1不变
可以传入多个数组作为参数
当concat()没有传入参数时,仅拷贝原数组的值
查找索引
indexOf()
返回要查找的项在数组中首次出现的位置
var fruits = ["Banana", "Orange", "Apple"];
var index = fruits.indexOf("Apple") //index的值是2
在没找到的情况下返回-1
var fruits = ["Banana", "Orange", "Apple"];
var index = fruits.indexOf("Mango") //index的值是-1
多个相同元素的情况只返回首个元素出现的位置
var fruits = ["Banana", "Orange", "Apple", "Orange"];
var index = fruits.indexOf("Orange") //index的值是1
数组截取
slice()
用数组的某个片段切出新数组
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var newArr = fruits.slice(1) //newArr的值是[“Orange”, “Apple”, “Mango”]; fruits的值不变
当slice()参数为一个时,表示从该参数位置开始,直到数组结束部分的所有元素
如arr.slice(3)会截取从arr[3]开始(包含arr[3])往后的所有元素组成一个新数组
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var newArr = fruits.slice(1,3) //newArr的值是[“Orange”, “Apple”]; fruits的值不变
当slice()参数为两个时,表示从第一个参数位置开始,到第二个参数位置(不包含)之间元素
如arr.slice(3,6)会截取从arr[3]开始(包含arr[3])到arr[6](不包含arr[6])即arr[3],arr[4],arr[5]
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var newArr = fruits.slice(-2) //newArr的值是[“Apple”, “Mango”];
当参数为负数时表示从结尾开始截取几个元素,如arr.slice(-10)表示截取arr的最后十个元素
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var newArr = fruits.slice(-3,-1) //newArr的值是[“Orange”, “Apple”];
当slice()参数为两个负数时,表示倒数的元素区间
如arr.slice(-10,-2)表示从倒数第十个元素(包含)到倒数第二个元素(不包含)
练习
使用for循环生成一个1~100的数组[1,2,3,….,99,100], 使用slice()截取33~55的部分[33,34,…54,55]
var arr=[]
for(i=0;i<100;i++){
arr[i]=i+1
}
var newArr=arr.slice(32,55)
数组更新
splice()
向数组中删除项目,然后返回被删除的项目,该方法会修改原数组
arr.splice(index, howmany, item1,…,itemX)
index: 必选 规定删除项目的位置,使用负数可从数组结尾处规定位置。
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var items = fruits.splice(2) //fruits的值是[“Banana”, “Orange”]; items的值是[“Apple”, “Mango”]
howmany: 可选 要删除的项目数量。如果不填,则删除剩余所有项目; 如果设置为 0,则不会删除项目。
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var items = fruits.splice(2,1) //fruits的值是[“Banana”, “Orange”, “Mango”]; items的值是[“Apple”]
item1, …, itemX:可选 向数组添加的新项目。
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var items = fruits.splice(2,0,"Pear") //fruits的值是[“Banana”, “Orange”, “Pear”, “Apple”, “Mango”];
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var items = fruits.splice(2,1,"Pear") //fruits的值是[“Banana”, “Orange”, “Pear”, “Mango”];
练习
使用for循环生成一个1~100的数组[1,2,3,….,99,100], 使用splice()将其中的66修改为666,并在3和4之间插入3.14
var arr=[]
for(i=0;i<100;i++){
arr[i]=i+1
}
arr.splice(65,1,666)
arr.splice(2,0,3.14)
数组归并
reduce()
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
arr.reduce(function(acc,cur,index,arr){}, initialValue)
acc: 必选 accumulator 累加器,计算结束后的返回值
cur: 必选 currentValue 当前元素
index: 可选 currentIndex 当前元素的索引
arr: 可选 currentArray 当前元素所属的数组
initialValue: 可选 传递给函数的初始值
数组求和
var arr=[1,2,3,4]
var result=arr.reduce(funcation(a,b){
return a+b
})
二维数组合并为一维数组
var arr=[[1,2],[3,4],[5,6]]
var result=arr.reduce(funcation(a,b){
return a.concat(b)
})
数组去重
var arr=[1,2,4,3,3,2,1,5,4]
var result=arr.reduce(funcation(a,b){
if(a.indexOf==-1){
a.push(b)
}
return a
},[])
求数组中的最大值
var arr=[1,3,4,6,7,2,5]
var result=arr.reduce(funcation(a,b){
return Math.max(a,b)
})