数组中常用api
数组中常用api
Array.push()
依次将内容添加到数组的尾部,并返回新长度 直接在源数组上进行修改
var arr = [5, 8, true];
var alength = arr.push('zhangsan', 123, 'lisi');
console.log(arr); // [5, 8, true,"zhangsan", 123, "lisi"]
console.log(alength); //返回新长度,6
Array.pop()
无参数,删除并返回数组的最后一个元素,将数组的长度-1 。若数组为空,则直接返回undefined
var arr = [5, 8, 9];
var val = arr.pop();
console.log(arr); //[5, 8]
console.log(val); // 9
Array.unshift()
将元素依次插入到数组的头部,返回数组的新长度,直接修改源数组
var arr = [5, 8, true];
arr.unshift('ok', 'ojbk');
console.log(arr.unshift()); // 新数组长度 5
console.log(arr); //['ok','ojbk',5, 8, true];
Array.shift()
删除,并返回数组的第一元素,将余下元素的索引前移一位,直接操作源数组
var arr = [5, 8, true];
console.log(arr.shift()); //5
console.log(arr); //[8, true];
Array.sort()
排序字符串或者数字:按照字符编码,修改原数组
a 排序字符串 先排第一位:比如abc,则是a先排;之后依次比较其他位
var arr = ['aaa', 'abc', 'abb', 'cba', 'aaa'];
console.log(arr.sort()); //[aaa aaa abb abc cba]
console.log(arr); //修改原数组:[aaa aaa abb abc cba]
排的顺序如下:
//aaa abc abb aaa cba 排第一位
//aaa aaa abc abb cba 排第二位
//aaa aaa abb abc cba 排第三位
b 排序数字
利用sort方法是如下效果,不符合正常的排序逻辑
var arr2 = [123, 111, 1, 12, 181];
console.log(arr2.sort()); // 1 111 12 123 181
排的顺序如下:
//111 1 12 123 181
// 1 111 12 123 181
实现数字从大到小或者从小到大排序的方法:
a. 用回调函数方法1
var arr = [123, 111, 1, 12, 181];
function compare(a, b) {
return a - b; //升序排列
//return b - a; //降序排列
}
arr.sort(compare);
console.log(arr); // 1 12 111 123 181
b. 用回调形式方法2 把一个函数作为参数传入,另一个函数的方法就是回调函数
var arr = [123, 111, 1, 12, 181];
//把一个函数作为参数传入另一个函数的方法就是回调函数
console.log(arr.sort(function(a, b) {
return a - b;
})); // 1 12 111 123 181
Array.reverse()
颠倒数组中的所有元素顺序,直接操作源数组
var arr = [5, 8, true];
console.log(arr.reverse()); //[true, 8, 5]
Array.toString()
将数组转换成字符串,以”,“分隔。 返回:新字符,不修改源数组
var arr = [5, 8, true,'zhangsan', 123, 'lisi'];
var str = arr.toString();
console.log(str); //5,8,true,zhangsan,123,lisi
console.log(arr); //[5, 8, true, "zhangsan", 123, "lisi"]
Array.join()
将数组的每一个元素都转换成字符串,然后连接这些字符串,连接符默认”,” 也可以更改为其他,
不修改源数组
var arr = [5, 8, true];
var str1 = arr.join()
console.log(str1); //"5,8,true"
console.log(arr); //[5, 8, true]
var str = arr.join(""); //连接符为空
console.log(str); //"58true"
var str3 = arr.join("-"); //连接符为-
console.log(str3); //"5-8-true"
Array.concat()
依次将内容添加到数组的尾部,并返回新数组,不修改源数组
var arr = [5, 8, true];
var arr2 = arr.concat('ok', 123);
console.log(arr); // [5, 8, true]
console.log(arr2); //[5, 8, true,'ok', 123]
Array.slice()
截取并返回数组的一部分,从start到end(不包括end)。如果是负数则从后往前数(截取顺序不变)
start: 开始数组的小标,-1指最后一个元素,-2值倒数第二个元素 end: 结束处的数组小标(不包括end本身);如果是负数,则从尾部算起(不包括本身)
返回值: 新数组,不修改原数组
var arr = [5, 8, true,'zhangsan', 123, 'lisi'];
var arr3 = arr.slice(1); //从arr[1]]到结尾
console.log(arr3); //[8, true,'zhangsan', 123, 'lisi'];
console.log(arr); //[5, 8, true,'zhangsan', 123, 'lisi'];
----------------------
var arr = [5, 8, true,'zhangsan', 123, 'lisi'];
var arr3 = arr.slice(1,4); //从arr[1]- arr[4](不包括arr[4])
console.log(arr3); //[8, true,'zhangsan']
console.log(arr); //[5, 8, true,'zhangsan', 123, 'lisi'];
----------------------
var arr = [5, 8, true,'zhangsan', 123, 'lisi'];
var arr2 = arr.slice(-3,4); //从倒数第三个 - arr[4](不包括arr[4])
console.log(arr2); //['zhangsan']
----------------------
var arr = [5, 8, true,'zhangsan', 123, 'lisi'];
var arr2 = arr.slice(1,-1); //从1到--倒数第一个(不包括本身)
console.log(arr2); //[8, true,'zhangsan', 123];
----------------------
var arr = [5, 8, true,'zhangsan', 123, 'lisi'];
var arr2 = arr.slice(-2,-1); //倒数第2个 --倒数第一个(不包括本身)
console.log(arr2); //[123];
Array.splice()
修改源数组
语法:
array.splice(start[, deleteCount[, item1[, item2[, …]]]])
返回值: 被删除元素数组
a. 传递一个参数的时候:
表示从这个参数的位置开始一直截取到最后
var arr = [2,4,6,7,8,9];
//[2,4,6,7,8,9]
console.log(arr);
//参数为2表示从索引下标为2的位置开始一直截取到数组的最后;
var n = arr.splice(2);
//[6,7,8,9] -splice()返回的是截取到的数组
console.log(n);
//[2,4] -原来的数组结构发生改变,为splice截取之后剩下的数组
console.log(arr);
b. 传递两个参数时:
传递两个参数,第一个参数表示开始的位置,第二个参数表示要截取的个数; 如果第二个参数为0,则表示不截取,返回的空数组,原来的数组不变
var arr = [2,4,6,7,8,9];
console.log(arr);//[2,4,6,7,8,9]
var n = arr.splice(2,3); //表示从下标位置为2开始截取3个数
console.log(n); //[6, 7, 8]
console.log(arr);//[2,4,9]
-----------
var arr = [2,4,6,7,8,9];
var n = arr.splice(2,0); //表示从下标位置为2开始截取3个数
console.log(n); //返回空数组[]
console.log(arr); //源数组不变[2,4,6,7,8,9]
c. 传递三个数组的时候
1. 当第二个参数不为0的时候
var arr = [2,4,6,7,8,9];
//[2,4,6,7,8,9]
console.log(arr);
//表示从下标为2的位置开始,删除3个项,在下标为2的位置添加一个数字为5的新项
var n = arr.splice(2,3,5);
console.log(n); //[ 6, 7, 8 ]
console.log(arr); //[2, 4, 5, 9]
2. 当第一个参数为0的时候
var arr = [2,4,6,7,8,9];
//[2,4,6,7,8,9]
console.log(arr);
//表示在下标为2的位置,截取0个数组,在下标为2的位置添加一个新项
var n = arr.splice(2,0,5);
//不截取,返回空数组[]
console.log(n);
//[2, 4, 5, 6, 7, 8, 9]
//6这个位置无5的情况下会被删除,因为插入5是在他之前
console.log(arr);