数组中一些API方法
1. isArray()
检测变量是否是一个数组,如果是数组返回true,反则false
语法:Array.isArray(arrayObject)
var arr = "我不是数组,我是字符串";
console.log(Array.isArray(arr)); // false
var arr_A = ["小何","小明","小红"];
console.log(Array.isArray(arr_A)); // true
补充:instanceof
方法也是可以检测变量是否是一个数组。
语法:arrayObject instanceof Array
var arr_A = ["小何","小明","小红"];
console.log(arr_A instanceof Array); // true
2. 队列方法 -(后加后减)
push()
向数组中末尾位置添加值进去
语法:arrayObject.push(value1,value2)
可添加多个值,以逗号隔开
var arr = ["小何","小明","小红"];
// 这里是将小王同学添加到arr数组中最后一个位置
var arr_A = arr.push("小王同学");
console.log(arr); // ["小何", "小明", "小红", "小王同学"]
shift()
向数组开头位置移除一个值
语法:arrayObject.shift()
var arr = ["小何","小明","小红"];
// 这里将小何移除
var arr_A = arr.shift();
console.log(arr); // ["小明","小红"]
2.1 反向队列方法 -(前加后减)
unshift()
是向数组开头位置添加一个值
语法:arrayObject.unshift(value1,value2)
可添加多个值,以逗号隔开
var arr = ["小何","小明","小红"];
var arr_A = arr.unshift("小王同学");
console.log(arr); // ["小王同学","小何","小明","小红"]
pop()
是向数组末尾位置移除一个值
语法:arrayObject.pop()
var arr = ["小何","小明","小红"];
var arr_A = arr.pop();
console.log(arr); // ["小何","小明"]
3. 重排序数组
reverse()
是颠倒数组中元素的顺序
语法:arrayObject.reverse()
var arr = ["1","2","3","4","5","6","7"];
var arr_A = arr.reverse();
console.log(arr); // ["7", "6", "5", "4", "3", "2", "1"]
sort()
用于对数组的元素进行排序。是将数组中数值转换为字符串,然后按ASCLL码进行比较大小,最后从小到大依次排序 。也就是说如果这个方法里不写参数,他默认是先将数值转换为字符串,然后根据ASCLL码进行比较。如果要写参数,就必须是一个函数,这个函数为数值的排序方式。以下有2种代码,一种是不传参数,一种是传参数,看下具体有什么不同的地方。
语法:arrayObject.sort(sortby)
为可选。规定排序顺序。必须是函数。
代码1:不传参数
var arr = [1,2,10,20,5];
var arr_A = arr.sort();
console.log(arr); // [1,10,2,20,5]
以上代码是不传参数,会默认转为字符串,然后按Unicode
编码再进行比较,我们要怎么才能知道这几个数字的 Unicode
编码是多少呢?可以使用charCodeAt()
方法,它是返回字符的 Unicode
编码的。我们使用这个方法看下上面几个数字的对应的 Unicode
编码是多少,然后看下不传参数程序排序是不是按这个排序的。
语法:stringObject.charCodeAt(index)
index : 必需。表示字符串中某个位置的数字,即字符在字符串中的下标。
console.log("1".charCodeAt()); // 这是"1"的Unicode编码为 49
console.log("2".charCodeAt()); // 这是"2"的Unicode编码为 50
console.log("10".charCodeAt()); // 这是"10"的Unicode编码为 49
console.log("20".charCodeAt()); // 这是"20"的Unicode编码为 50
console.log("5".charCodeAt()); // 这是"5"的Unicode编码为 53
最后通过charCodeAt()
方法已将字符对应的Unicode编码显示出来,按照不传参数的排序原理确实是按Unicode编码比较排序的。
代码2:传参数,sort()
方法不传参数下规则是先转字符串,然后按Unicode编码进行比较,如果需要传参数,参数一定要是一个函数,这个函数为数值排序方式。
var arr = [1,2,10,20,5];
var arr_A = arr.sort(function add(a, b) {
return a - b;
});
console.log(arr); // [1, 2, 5, 10, 20]
4. 操作方法
concat()
是用于连接两个或多个数组。
语法:arrayObject.concat(array1,array2,.....,arrayx)
情况1: 单个数组连接
var arr = [1,2,3];
var arr1 = arr.concat(4,5);
console.log(arr1); // [1,2,3,4,5]
情况2: 数组1与数组2,两个数组进行连接
var arr1 = [1,2,3];
var arr2 = [4,5,6];
var arr3 = arr1.concat(arr2);
console.log(arr3); // [1, 2, 3, 4, 5, 6]
情况3: 多个数组连接
var arr1 = [1, 2, 3];
var arr2 = [4, 5, 6];
var arr3 = [7, 8, 9];
var arr4 = [10, 11, 12];
var arr5 = [13, 14, 15];
var result = arr1.concat(arr2,arr3,arr4,arr5);
console.log(result); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
slice()
从已有的数组中返回选定的元素,也叫数组截取。
语法:arrayObject.slice(start,end)
情况1: 不传参数 ===> 默认截取所有
var color = ["red","green","blue"];
console.log(color.slice()); // 返回一个子数组 ["red","green","blue"]
情况2: 传一个参数 ===> 表示从索引n开始,后面的都会被截取。
var color = ["red","green","blue"];
console.log(color.slice(1)); // [green","blue"]
情况3: 传两个参数 ===> 表示从索引n开始到索引n结束。开始到结束这一段会被截取,然后返回新的子数组。
注意:这里不包含结束索引,包前不包后。例如:slice(2,5),它的意思是从索引2开始到索引5结束,但是返回子数组它是不包含索引5的!
var color = ["red","green","blue","pink","skyblue","yellow","orange","blaek"];
console.log(color.slice(2,5)); // "blue","pink","skyblue" [2-5区间]但是不包含5
splice()
splice() 可删除,可插入,可替换
语法:arrayObject.splice(index,howmany,item1,.....,itemX)
index:索引,howmany:删除多少,item1:要插入的值,可以是多个。
(1)删除:可以删除任意数量的项,只需指定2 个参数:要删除的第一项的位置和要删除的项数。
var color = ["red","green","blue","pink","skyblue","yellow","orange","blaek"];
console.log(color.splice(1,4)); // "green","blue","pink","skyblue"
以上代码color.splice(1,4)
表示从索引1开始删除后4个项。返回删除数值数组。
(2)插入:可以向指定位置插入任意数量的项,只需提供3 个参数:起始位置、0(要删除的项数)和要插入的项。如果要插入多个项,可以再传入第四、第五,以至任意多个项。
var color = ["red","green","blue","pink"];
var colors = color.splice(1,0,"orange","blaek")
console.log(color); // ["red", "orange", "blaek", "green", "blue", "pink"]
以上代码 color.splice(1,0,"orange","blaek")
表示从索引1 "green"开始,删除0个项目,后面两个字符串 “orange”,“blaek” 为要插入的项。注意这里是向索引1 "green"前插入数据,而不是后插入!
(3)替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定3 个参数:起始位置、要删除的项数和要插入的任意数量的项。插入的项数不必与删除的项数相等。
var color = ["red","green","blue","pink","yellow"];
var colors = color.splice(1,2,"orange","blaek")
console.log(color); // ["red", "orange", "blaek", "pink", "yellow"]
以上代码color.splice(1,2,"orange","blaek")
表示从索引1 "green"开始,删除后2个项目"blue","pink"
,并插入2个值 "orange","blaek"
5.indexOf()
是查找数组中指定的值,并且返回该指定值的索引位置。
语法:stringObject.indexOf(searchvalue,fromindex)
情况1: 传1个值,也就是查找指定值
var color = ["red","green","blue","pink","yellow"];
var colors = color.indexOf("blue");
console.log(colors); // 2 ===> "blue"
情况2: 这个方法可以传两个参数,参数1:查找值,参数2:查找开始的位置
var color = ["red","green","blue","pink","yellow"];
var colors = color.indexOf("blue",1);
console.log(colors); // 2
以上代码color.indexOf("blue",1)
表示从索引1 "green"
位置查找指定值"blue"
。注意:如果后面没有查找到该指定值,会返回-1。