创建数组的两种方式
1.使用new Array()构造函数
var arr = new Array(); //可以是空数组或直接写入数组内容
2.使用数组字面量表示法
var arr=[] //可以是空数组或直接写入数组内容
数组的方法
常规方法
改变原数组:join()、push()和pop()、shift() 和 unshift()、sort()、reverse()、splice()
不改变原数组:concat()、slice()
ES5新增方法
indexOf()和 lastIndexOf()、forEach()、map()、filter()、every() 、some()、reduce()和 reduceRight()
- join():数组变字符串
默认不加为逗号。
//示例1
var arr = [],str
var arr = [1,2,3,4,5,6]
str = arr.join("")
console.log(str) //'123456'
//示例2
str = arr.join()
console.log(str) //'1,2,3,4,5,6'
//示例3
str = arr.join(' ')
console.log(str) //'1 2 3 4 5 6'
- push():数组后追加任意长度新元素,返回数组
- pop():删除数组最后一位元素,返回删除的值
var arr = [1,2,3,4,5,6]
arr.push(7,8)
console.log(arr) //[1,2,3,4,5,6,7,8]
var item = arr.pop()
console.log(arr) //[1,2,3,4,5,6,7]
console.log(item) //8
- unshift():数组前追加任意新元素,返回数组
- shift():删除数组第一位元素,返回删除的值
var arr = [1,2,3,4,5,6]
arr.unshift(0)
console.log(arr) //[0,1,2,3,4,5,6]
var item = arr.shift()
console.log(arr) //[1,2,3,4,5,6]
console.log(item) //0
- sort():从小到大排列数组元素,或者可以加入方法进行特定排列。
默认转字符串后排列,所以数字不能有很好的结果,需要用方法进行排列。
//示例1
var arr = ["a","c","d","b"]
arr.sort()
console.log(arr) // ["a","b","c","d"]
//示例2
var arr = [13, 24, 51, 3];
console.log(arr); // [13, 24, 3, 51]
//示例3
function compare(val1, val2) {
if (val1 < =val2) {
return false;//不换位
} else {
return true;//换位
}
}
var arr = [13, 24, 51, 3]
arr.sort(compare)
console.log(arr); // [3, 13, 24, 51]
- reverse():反转数组
var arr = [1, 2 , 3, 4, 5, 6]
arr.reverse()
console.log(arr) //[6, 5, 4, 3, 2, 1]
- concat():数组后追加新元素,返回新数组
追加数组会保持数组结构加入,非数组将分别追加(如下示例2、3)
//示例1
var arr = [1, 2 , 3, 4, 5, 6]
var arrTwo = arr.concat(7)
console.log(arr) // [1, 2 , 3, 4, 5, 6]
console.log(arrTwo) // [1, 2 , 3, 4, 5, 6, 7]
//示例2
var arr = [1, 2 , 3, 4, 5, 6]
var arrTwo = arr.concat(7,[8,9])
console.log(arr) // [1, 2 , 3, 4, 5, 6]
console.log(arrTwo) // [1, 2 , 3, 4, 5, 6, 7, 8, 9]
//示例3
var arr = [1, 2 , 3, 4, 5, 6]
var arrTwo = arr.concat([7,[8,9]])
console.log(arr) // [1, 2 , 3, 4, 5, 6]
console.log(arrTwo) // [1, 2 , 3, 4, 5, 6, 7,[ 8, 9]]
- slice():利用下标拆分并返回新数组
规则--两个参数,下标都从0开始。传入一个参数第二位默认最后一位,传入正数从左到右数,传入负数从右向左数
//示例1
var arr = [1, 2 , 3, 4, 5, 6]
var arrTwo = arr.slice(1)
console.log(arr) // [1, 2 , 3, 4, 5, 6]
console.log(arrTwo) // [2 , 3, 4, 5, 6]
//示例2
var arr = [1, 2 , 3, 4, 5, 6]
var arrTwo = arr.slice(1,3)
console.log(arr) // [1, 2 , 3, 4, 5, 6]
console.log(arrTwo) // [2 , 3, 4]
//示例3
var arr = [1, 2 , 3, 4, 5, 6]
var arrTwo = arr.slice(-3,-1)//也可写作slice(2,-1)
console.log(arr) // [1, 2 , 3, 4, 5, 6]
console.log(arrTwo) // [3, 4, 5]
- splice():splice(起始位置, 要删除项数n , 任意数量插入项)
- splice(起始位置, 要删除项数n):从起始位置开始删除n项
var arr = [1, 2 , 3, 4, 5, 6]
arr.splice(0,2)
console.log(arr) // [3, 4, 5, 6]
var arr = [1, 2 , 3, 4, 5, 6]
arr.splice(1,2)
console.log(arr) // [1, 4, 5, 6]
- splice(起始位置, 要删除项数n , 任意数量插入项):最终插入或者替换数组
//插入:将删除项设为0
var arr = [1, 2 , 3, 4, 5, 6]
arr.splice(0,0,0)
console.log(arr) // [0,1,2,3, 4, 5, 6]
arr.splice(5,0,7,8)
console.log(arr) // [0,1,2,3, 4, 5, 6,7,8]
//置换:设置删除项数,先删除后增加
var arr = [1, 2 , 3, 4, 5, 6]
arr.splice(0,1,0)
console.log(arr) // [0,2,3, 4, 5, 6]
arr.splice(5,1,7,8)
console.log(arr) // [0,2,3, 4, 5, 7, 8]
------------------接下来是不太一样的-------------------
-- indexOf()和 lastIndexOf():查找元素在数组的位置,一个顺序查一个反序查。
有重复的会返回第一个遇到该元素的位置(如示例2)。没有返回-1
//示例1
var arr = [1, 2 , 3, 4, 5, 6]
var index = arr.indexOf(5)
var index1 = arr.lastindexOf(5)
console.log(index) //4
console.log(index1) //4
//示例2
var arr = [1, 2 , 3, 4, 5,5, 6]
var index = arr.indexOf(5)
var index1 = arr.lastindexOf(5)
console.log(index) //4
console.log(index1) //5
//示例3
var arr = [1, 2 , 3, 4, 5, 6]
index= arr.indexOf(7)
console.log(index) //-1
-- forEach():遍历。forEach(数组每项内容, 下标, 数组本身)
var arr = [1, 2, 3, 4, 5];
arr.forEach(function(item, index, arr){
console.log(item + '|' + index + '|' + arr);
});
// 输出为:
// 1|0| [1, 2, 3, 4, 5]
// 2|1| [1, 2, 3, 4, 5]
// 3|2| [1, 2, 3, 4, 5]
// 4|3| [1, 2, 3, 4, 5]
// 5|4| [1, 2, 3, 4, 5]
-- map():映射。用数学理解就是建立数组关系。
//示例1: 倍增
var arr = [1, 2 , 3, 4, 5, 6]
var arr2 = arr.map(function(item){
return 2*item;
});
console.log(arr2) //[2, 4 , 6, 8, 10, 12]
//示例2: 平方
var arr = [1, 2 , 3, 4, 5, 6]
var arr2 = arr.map(function(item){
return item*item;
});
console.log(arr2) //[1, 4 , 9, 16, 25, 36]
-- filter():过滤,返回符合条件的。
主要还是看条件表达式怎么写,比如2的倍数、质数或者什么数列元素。
var arr = [1, 2, 3, 4, 5, 6, 7, 8];
var arr2 = arr.filter(function(item) {
return item % 2 === 0 ;
});
console.log(arr2); //[2, 4, 6, 8]
-- every():判断每一项,都符合返回true,否则返回false。
判断数组是不是都符合某一个规律。
var arr = [1, 2, 3, 4, 5, 6, 7, 8];
var b = arr.filter(function(item) {
return item % 2 === 0 ;
});
console.log(b) //false
//对比组
var arr = [2, 4, 6, 8, 10, 12, 14, 16];
var b = arr.filter(function(item) {
return item % 2 === 0 ;
});
console.log(b) //true
-- some():数组里有一项符合条件就返回true。
var arr = [1, 3, 5, 7, 9, 11, 13, 15];
var b = arr.filter(function(item) {
return item % 2 === 0 ;
});
console.log(b) //false
//对比组
var arr = [1, 2, 3, 4, 5, 7, 9, 11];
var b = arr.filter(function(item) {
return item % 2 === 0 ;
});
console.log(b) //true
-- reduce()和 reduceRight():一个顺序一个反序。
arr.reduce(function(prev,cur,index,arr){...}, init)
- init 表示初始值。
- arr 表示原数组;
- prev 表示上一次调用回调时的返回值,或者初始值 init;
- cur 表示当前正在处理的数组元素;
- index 表示当前正在处理的数组元素的索引,若提供 init 值,则索引为0,否则索引为1;
//求和
var values = [1,2,3,4,5];
var sum = values.reduce(function(prev, cur, index, array){
return prev + cur;
});
console.log(sum); //5
1.未设置init, index=1, prev=1, cur=2
2.返回 3, prev=3, cur=3
3.返回 6, prev=6, cur=4
4.返回 10, prev=10, cur=5
5.返回 15, 结束
//求最大值
var max = arr.reduce(function (prev, cur) {
return Math.max(prev,cur);
});
//Math.max(prev,cur) 每次都会返回较大的作为prev与下一项cur进行比较
//数组去重
var newArr = arr.reduce(function (prev, cur) {
prev.indexOf(cur) === -1 && prev.push(cur);
return prev;
},[]);
//prev.indexOf(cur) === -1 判断是否存在该元素
//a && b,如果a存在,则返回b,否则返回a
//不存在就添加该元素到新数组,新数组不添加已存在的元素
网友评论