数组的创建方式
- 字面量创建数组
var names = ["terry","larry","tom"]
//字符串数组
var name = "name"
// 可以接收任何类型的数据当做数组的元素
var arr = [12,name,true,"larry",{},function(){},[],null];
- 使用构造函数
通过Array构造函数来创建数组
var names = new Array(); // 等价于 var names = [];
// 如果一个参数,并且是number类型的整数,则代表的是数组的长度。如果是number类型的小数,则报错。如果是其他类型,则当做数组元素放进去。
var names = new Array(3); //创建一个长度为3的数组
// 创建一个包含3个元素的数组 var arr = [undefined,undefined,undefined];
//var ages = new Array(2.4); //Error: Invalid array length
var ages = new Array("2.4");
var names = new Array('terry') //创建一个包含1个元素的数组,该元素的值为'terry'
// 两个参数或者多个参数,当做数组元素放进去
var names = new Array('terry','robin') //创建一个数组,数组中的元素使用实参初始化
数组的API
1 数组序列化
-
toString
默认逗号分隔字符串 -
join
以指定字符分隔字符串
var arr=['zhangsan','lisi','wangwu',{a:1}];
// toString
console.log(arr.toString()); // zhangsan,lisi,wangwu,[object Object]
// join join('分隔符')
console.log(arr.join('-')); // zhangsan-lisi-wangwu-[object Object]
2 构造函数方法
Array.isArray
判断是否是数组Array.from
从类数组对象或者可迭代对象中创建一个新的数组实例Array.of
根据一组参数来创建新的数组实例
// arguments 类数组对象
function foo() {
console.log(Array.isArray(arguments),typeof arguments); //false object
}
foo(1,2)
// 从类数组对象或者可迭代对象中创建一个新的数组实例
var myArr = Array.from("BRIUP");
console.log(myArr,typeof myArr); // [ 'B', 'R', 'I', 'U', 'P' ] object
// 根据一组参数来创建新的数组实例
console.log(Array.of(1,2,3)); //[ 1, 2, 3 ]
3 栈与队列
Array.prototype.push
向数组末尾添加一个或多个元素,返回新的数组长度
语法:array.push(item1, item2, ..., itemX)
Array.prototype.pop
删除数组最后一个元素,并返回删除的元素
语法:array.pop()
Array.prototype.shift
删除数组第一个元素,并返回删除的元素
语法:array.shift()
Array.prototype.unshift
向数组的开头添加一个或多个元素,返回新的数组长度
语法:array.unshift(item1, item2, ..., itemX)
var arr=['zhangsan','lisi','wangwu'];
// push() 添加元素到末尾
var newLength=arr.push('zhaoliu',123);
console.log(newLength,arr); //5 [ 'zhangsan', 'lisi', 'wangwu', 'zhaoliu', 123 ]
// pop() 删除最后一个元素
var delEle=arr.pop();
console.log(delEle,arr); //wangwu [ 'zhangsan', 'lisi' ]
// shift() 删除第一个元素
var delFirst=arr.shift()
console.log(delFirst,arr); //zhangsan [ 'lisi', 'wangwu' ]
// unshift() 在数组开头添加一个或多个元素
var newStartLen= arr.unshift("Lemon","Pineapple");
console.log(newStartLen,arr); //5 [ 'Lemon', 'Pineapple', 'zhangsan', 'lisi', 'wangwu' ]
4 排序方法
Array.prototype.reverse
颠倒数组中的元素
语法:array.reverse()
Array.prototype.sort
对数组进行排序
如果调用该方法时没有使用参数,将按字母顺序(Ascall编码)对数组中的元素进行排序
语法:array.sort(sortfunction)
//数字排序
当 a>b 时,
a - b > 0 ,排序结果 ===> b,a (升序)
b - a < 0 ,排序结果 ===> a,b (降序)
当 b>a 时,
a - b < 0 ,排序结果 ===> a,b (升序)
b - a > 0 ,排序结果 ===> b,a (降序)
当 a=b 时,
a - b = b - a =0 , 排序结果 ===> 保持不变
var arr=['zhangsan','lisi','wangwu'];
// reverse() 在数组元素进行颠倒
arr.reverse();
console.log(arr); //[ 'wangwu', 'lisi', 'zhangsan' ]
// sort() 方法用于对数组的元素进行排序
arr.sort(); //英文字符串排序 按字母顺序(Ascall编码)对数组中的元素进行排序
console.log(arr); //[ 'lisi', 'wangwu', 'zhangsan' ]
// 数组的数组进行排序
var numbers=[20,203,10,105,30,35,45,5];
numbers.sort(function (a,b) {
return a-b; //升序
});
console.log(numbers); //[5, 10, 20, 30,35, 45, 105, 203]
5 操作方法
concat
连接数组
不改变原数组,返回被连接数组的一个副本,返回一个新数组
语法:array1.concat(array2,array3,...,arrayX)
slice
截取元素
语法:array.slice(start, end) //截取从start到end的元素不包括end位置的元素
splice
添加或删除元素(改变原数组)
语法:array.splice(index,howmany,item1,.....,itemX)
var arr=['zhangsan','lisi','wangwu'];
// concat() 用于连接两个或多个数组或数据进行拼接
var arr2=[1,2,3];
var arr3=['a','b','c'];
var newArr=arr.concat(arr2,arr3,222);
console.log(newArr); //[ 'zhangsan', 'lisi', 'wangwu', 1, 2, 3, 'a', 'b', 'c', 222 ]
// slice() 截取一个数组或字符串
var newArr1=arr.slice(0,2); //0到2的元素,但不包含2的元素
var newArr2=arr.slice(-2); //0到2的元素,但不包含2的元素
console.log(newArr,arr); //[ 'zhangsan', 'lisi' ] [ 'lisi', 'wangwu' ]
// splice()添加元素
//从数组索引位置 1 开始,删除一个元素,添加两个新的元素"Lemon","Kiwi"
arr.splice(1,1,"Lemon","Kiwi");
console.log(arr); // [ 'zhangsan', 'Lemon', 'Kiwi', 'wangwu' ]
//从数组索引位置 0 开始,删除数组后的两个元素:
arr.splice(0,2);
console.log(arr); //[ 'wangwu' ]
6 位置方法
Array.prototype.indexOf
返回指定元素第一次出现的位置,如果没找到元素则返回-1
语法:array.indexOf(item,start) //start代表从什么位置开始检索,范围为0至length-1,非必须
Array.prototype.lastIndexOf
返回指定元素最后一次出现的位置,如果没找到元素则返回-1
语法: array.lastIndexOf(item,start)
var arr2=['zhangsan','lisi','wangwu','terry','lisi','larry']
console.log(arr2.indexOf('lisi')); //1
console.log(arr2.lastIndexOf('lisi')); //4
7 迭代方法
-
Array.prototype.every
检测数组所有元素是否都符合指定条件,返回布尔值注意:
- 如果检测有一个元素不满足,则整个表达式返回 false ,且剩余的元素不再进行检测。如果所有元素都满足条件,则返回 true。
- every不对空数组进行检测
语法:array.every(function(currentValue,index,arr), thisValue)
-
Array.prototype.some
检测数组中的元素是否有能满足指定条件,返回布尔值 -
Array.prototype.filter
创建一个新数组,元素均满足指定条件,返回新数组 -
Array.prototype.map
返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。 -
Array.prototype.forEach
调用数组的每个元素,并将元素传递给回调函数
var ages = [32, 33, 19,22, 40];
//every()
// 参数的顺序:当前元素 索引 当前元素的数组
var bool=ages.every(function (age,index,arr) {
// 是否ages里面的数据都大于18
return age>=20
})
console.log(bool); //false
//some()
var bool2=ages.some(function (age) {
// 是否ages里面的数据是否有小于20
return age<20
})
console.log(bool2); //true
//filter()
var newArr=ages.filter(function (age) {
return age>20
})
console.log(newArr); //[ 32, 33, 22, 40 ]
//map()
var numbers = [4, 9, 16, 25];
var result = numbers.map(function (number) {
return Math.sqrt(number)
})
console.log(result);//输出结果为:[ 2, 3, 4, 5 ]
//forEach()
ages.forEach(function (age,index) {
console.log(index+'-'+age);
})
//输出结果
0-32
1-33
2-19
3-22
4-40
ap()
var numbers = [4, 9, 16, 25];
var result = numbers.map(function (number) {
return Math.sqrt(number)
})
console.log(result);//输出结果为:[ 2, 3, 4, 5 ]
//forEach()
ages.forEach(function (age,index) {
console.log(index+'-'+age);
})
//输出结果
0-32
1-33
2-19
3-22
4-40