数组的常用方法:
push(v1,v2,v3...)
向数组尾部追加值
pop()
在数组尾部删除一个值
unshift()
向数组的头部追加值
shift()
向数组的头部删除一个值
join()
把数组变成字符串
includes()
判断数组中是否存在某个值
indexOf()
判断数组中是否存在某个值,返回第一次出现的下标,找不到就返回-1
lastIndexOf()
判断数组中是否存在某个值,返回最后一次出现的下标
concat()
拼接数组,返回一个新的数组
slice(i,i)
截取数组中的部分值,返回一个新的数组 (包前不包后)
splice
(i , 删除的个数 , 新增的值...) 新增,删除,替换 --- 直接改变原数组 !!!!!!!
用法:
push
, pop
, unshift
, shift
在上一篇博客中讲明了,这里说说别的方法的用法。
join()
,includes()
,indexOf()
,lastIndexOf()
<script>
var arr = [1, 2, 3, 4, 2, 5];
var str = arr.join('&');//用&符号将数据拼接
console.log(str);
console.log(arr.includes(20));//数组中不存在20,返回false
console.log(arr.indexOf(2));//数组中存在2,返回2出现第一次的下标 1
console.log(arr.lastIndexOf(2));//数组中存在2,返回2最后一次出现的下标
</script>
复制代码
concat()
拼接数组,返回一个新的数组
var arr1 = [1, 2, 3, 4];
var arr2 = [6, 7, 8];
var arr3 = arr1.concat(arr2);
console.log(arr3);//结果为[1,2,3,4,6,7,8]
复制代码
slice(i,i)
截取数组中的值 (包前不包后)
var arr4 = [1, 2, 3, 4, 5, 6, 7];
var arr5 = arr4.slice(2, 5);//截取下标为2到4的值,是下标哈,不包括下标为5的
console.log(arr5);//结果为[3,4,5]
复制代码
splice
(i , 删除的个数 , 新增的值...) 新增,删除,替换 --- 直接改变原数组,经常用到这个方法。\
- 用法1:在任意位置插入数据 arr.splice(i , 0 , v1 ,v2 , v3 ....)
var arr = [1, 2, 3, 4, 5];
arr.splice(arr.length, 0, 'a', 'b', 'c');//在第arr.length(数组长度)位置上删除0个数,增加‘a’,'b','c'
console.log(arr);//[1,2,3,4,5,'a','b','c']
复制代码
- 用法2:删除 arr.splice(i , 删除的个数)
//数组[1,2,3,4,5,'a','b','c']
arr.splice(2, 2);//找到下标2对应的值开始,删除两个数
console.log(arr);//[1,2,5,'a','b','c']
复制代码
- 用法3:替换arr.splice( i , 删除的个数 , 替换的值...)
//[1,2,5,'a','b','c']
arr.splice(3, 3, 'A', 'B', 'C');//找到下标3对应的值开始,往后删除3个值,即小写a,b,c会被删除,然后加上大写ABC
console.log(arr);//[1,2,5,'A','B','C']
复制代码
数组的判断方法:
这里又要提到数据类型了;
基本数据类型:number , string, boolean, null , undefined
基本数据类型可以通过typeof
来判断
引用数据类型:function 数组 对象
Array.isArray()
判断是不是数组
例如:
var arr = [1, 2, 3];
console.log(typeof arr); // object 用判断基本数据类型无法判断
console.log(Array.isArray(arr));//true,
复制代码
数组中常见的问题:
数组去重:
方法一:得到新数组:可以用上面所说的includes()方法,返回的值是布尔值
<script>
var arr = [1, 2, 3, 42, 1, 3, 2, 2, 1, 3, 5];
var newArr = [];
// 遍历原数组
for (var i in arr) {
// 判断原数组中每一个值是否在新数组中存在,不存在就假到新数组中
if(!newArr.includes(arr[i])) {
newArr.push(arr[i])
}
}
console.log(newArr);//[1,2,3,42,5]
复制代码
方法二:直接改变原数组,拿第一个值出来跟后面所有的值作比较,出现重复的就删掉,要注意数组塌陷,因为每次删除一个值的时候,数组的长度会改变,进而,下标也会发生变化。
var arr = [1, 2, 3, 42, 1, 3, 2, 2, 1, 3, 5];
// 比较的轮数
for (var i = 0; i < arr.length - 1; i++) {
// 拿第i个数与后面所有的数进行比较
for (var j = i + 1; j < arr.length; j++) {
// 只要相同就删除
if (arr[i] === arr[j]) {
// 每删除一个的时候,数组塌陷!!!!!!!!!!
arr.splice(j, 1);
j--;
}
}
}
console.log(arr);//[1,2,3,42,5]达到去重的目的
复制代码
统计数组中每一个值出现的次数:
方法一:先去重再统计
思路:先将数组去重,得到一个没有重复值的新数组,然后再那新数组中的每一个值与原数组进行比较,如果出现相同的值就加一
var arr = [1, 2, 3, 42, 1, 3, 2, 2, 1, 3, 5];
var arr2 = [] ;
for(var i = 0 ; i < arr.length ; i++) {
if(!arr2.includes(arr[i])) {
arr2.push(arr[i])
}
}
console.log(arr2);//[1,2,3,42,5]
// 拿新数组中的每一个值与原数组进行比较
for(var i = 0 ; i < arr2.length ; i++) {
//定义的计数器
var count = 0 ;
for(var j = 0 ; j < arr.length ; j++) {
if(arr2[i] === arr[j]) {
count++
}
}
console.log(arr2[i] + '出现了' + count + '次');
}
复制代码
结果如下:
方法二:一边删除一边统计
思路:拿数组中第一个值与后面的值进行比较,碰到重复的值就删除,所以要用到splice()
方法,需要注意数组塌陷,直到最后一个值,就删除干净了

var arr = [1, 2, 3, 42, 1, 3, 2, 2, 1, 3, 5];
for (var i = 0; i < arr.length; i++) {
// 拿第一个值与后面的值进行比较
//计数器,数组每个数至少出现了一次
var count = 1;
for (var j = i + 1; j < arr.length; j++) {
if (arr[i] === arr[j]) {//判断是否相等,相等就删除,计数器就加一
count++;
arr.splice(j, 1);
j--;//注意数组塌陷
}
}
console.log(arr[i] + '出现了' + count + '次');
}
console.log(arr);
复制代码
方法三:先排序再统计
思路:排序后,拿数组中第一个值与后面的值进行比较,相等就计数加一,注意这里就不用依次那值去比较了,因为排序后重复的值都在一块,比较一轮后,直接跳到比较出现不相等的位置
//为了方便讲解直接定义一个排序好的数组,可以用冒泡排序,选择排序来排序的,还可以运用sort()方法来排序
var arr = [1, 1, 1, 1, 2, 2, 2, 3, 4, 4];
for (var i = 0; i < arr.length;) {
var count = 1;
for (var j = i + 1; j < arr.length; j++) {
if (arr[i] === arr[j]) {
count++;
} else {
// 只要不相等说明后面没有相同 的了
break;
}
}
console.log(arr[i] + '出现了' + count + '次');
i += count//i直接跳到计数的位置,因为重复的都在一块
}
复制代码
回调函数:
回调函数难以理解,其实就是把一个函数当做另一个函数的参数,注意,特别注意的是要分清实参与形参。
下一篇好好说说回调函数。