内置对象-数组Array

内置对象Array

4. 数组对象

4.1 概述

image-20230228174338309

4.2 常用方法

4.21 检测是否为数组

  • instanceof

  • Array.isArray()

image-20230228174641144

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<script>
// 翻转数组
function reverse(arr) {
// if (arr instanceof Array) {
if (Array.isArray(arr)) {
var newArr = [];
for (var i = arr.length - 1; i >= 0; i--) {
newArr[newArr.length] = arr[i];

}
return newArr;
} else {
return 'error 这个参数要求必须是数组格式 [1,2,3]'
}
}
console.log(reverse([1, 2, 3]));
console.log(reverse(1, 2, 3));
// 检测是否为数组
// (1) instanceof 运算符 它可以用来检测是否为数组
var arr = [];
var obj = {};
console.log(arr instanceof Array);
console.log(obj instanceof Array);
// (2) Array.isArray(参数); H5新增的方法 ie9以上版本支持
console.log(Array.isArray(arr));
console.log(Array.isArray(obj));
</script>

4.22 增删数组元素

  • push(后)、unshift(前)为增;

  • pop(后)、shift(前),为删

image-20230228175139595

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<script>
// 添加删除数组元素方法

// 1. push() 在我们数组的末尾 添加一个或者多个数组元素 push 推
var arr = [1, 2, 3];
// arr.push(4, 'pink');
console.log(arr.push(4, 'pink'));
console.log(arr);
// (1) push 是可以给数组追加新的元素
// (2) push() 参数直接写 数组元素就可以了
// (3) push完毕之后,返回的结果是 新数组的长度
// (4) 原数组也会发生变化

// 2. unshift 在我们数组的开头 添加一个或者多个数组元素
console.log(arr.unshift('red', 'purple'));
console.log(arr);
// (1) unshift是可以给数组前面追加新的元素
// (2) unshift() 参数直接写 数组元素就可以了
// (3) unshift完毕之后,返回的结果是 新数组的长度
// (4) 原数组也会发生变化

// 3. pop() 它可以删除数组的最后一个元素
console.log(arr.pop());
console.log(arr);
// (1) pop是可以删除数组的最后一个元素 记住一次只能删除一个元素
// (2) pop() 没有参数
// (3) pop完毕之后,返回的结果是 删除的那个元素
// (4) 原数组也会发生变化

// 4. shift() 它可以删除数组的第一个元素
console.log(arr.shift());
console.log(arr);
// (1) shift是可以删除数组的第一个元素 记住一次只能删除一个元素
// (2) shift() 没有参数
// (3) shift完毕之后,返回的结果是 删除的那个元素
// (4) 原数组也会发生变化
</script>

4.23 数组排序

  • reserve()颠倒数组

  • sort()排序数组

image-20230228175524167

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 <script>
// 数组排序

// 1. 翻转数组
var arr = ['pink', 'red', 'blue'];
arr.reverse();
console.log(arr);

// 2. 数组排序(冒泡排序)
var arr1 = [13, 4, 77, 1, 7];
arr1.sort(function(a, b) {
// return a - b; 升序的顺序排列
return b - a; // 降序的顺序排列
});
console.log(arr1);
</script>

4.24 数组索引

  • indexOf() 前

  • lastindexOf() 后

image-20230228175756613

1
2
3
4
5
6
7
8
9
10
11
12
<script>
// 返回数组元素索引号方法 indexOf(数组元素) 作用就是返回该数组元素的索引号 从前面开始查找
// 它只返回第一个满足条件的索引号
// 它如果在该数组里面找不到元素,则返回的是 -1
// var arr = ['red', 'green', 'blue', 'pink', 'blue'];
var arr = ['red', 'green', 'pink'];
console.log(arr.indexOf('blue'));
// 返回数组元素索引号方法 lastIndexOf(数组元素) 作用就是返回该数组元素的索引号 从后面开始查找
var arr = ['red', 'green', 'blue', 'pink', 'blue'];

console.log(arr.lastIndexOf('blue')); // 4
</script>

4.25 数组转字符串

  • toString()

  • join(‘分隔符’)

image-20230228180112139

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script>
// 数组转换为字符串

// 1. toString() 将我们的数组转换为字符串
var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c', 'd', 'e', 'f'];
console.log(arr.toString()); // 1,2,3
console.log(arr.length); //

// 2. join(分隔符)
var arr1 = ['green', 'blue', 'pink'];
console.log(arr1.join()); // green,blue,pink
console.log(arr1.join('-')); // green-blue-pink
console.log(arr1.join('&')); // green&blue&pink
</script>

4.26 数组连、截、删

  • 连concat()

  • 截slice()

  • 删splice()

image-20230228180314688

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<script>
//1、题目描述:把下面数组的首尾两个元素互换
var arr = ["鹿晗", "王俊凯", "蔡徐坤", "彭于晏", "周杰伦", "刘德华", "赵本山"]

// 第一种方法
// var newIndex = arr[0];
// arr[0] = arr[arr.length-1]
// arr[arr.length-1] = newIndex
// console.log(arr);

// 第二种方法
var arrCenter=arr.slice(1, arr.length-1)// 数组截取slice(begin,end),返回被截取项目的新数组
var head=arr.splice(0,1)//数组删除splice(第几个开始,要删除个数),返回被删除的新数组
var foot=arr.splice(arr.length-1,1)//数组删除splice(第几个开始,要删除个数),返回被删除的新数组
var headFoot=head.concat(foot)//.contact连接两个或多个数组不影响原数组,返回一个新的数组
arrCenter.push(headFoot[0])//push末尾添加一个或多个元素,注意修改原数组,并返回新的长度
arrCenter.unshift(headFoot[headFoot.length-1])//unshft向数组的开头添加一个或更多元素,注意修改原数组,并返回新的长度
console.log(arrCenter)
console.log(head);
console.log(foot);
console.log(headFoot.reverse());//reverse翻转数组
</script>

4.3 案例

4.31 筛选数据

1
2
3
4
5
6
7
8
9
10
11
12
<script>
// 有一个包含工资的数组[1500, 1200, 2000, 2100, 1800],要求把数组中工资超过2000的删除,剩余的放到新数组里面
var arr = [1500, 1200, 2000, 2100, 1800];
var newArr = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i] < 2000) {
// newArr[newArr.length] = arr[i];
newArr.push(arr[i]);
}
}
console.log(newArr);
</script>

4.32 数组去重

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 <script>
// 数组去重 ['c', 'a', 'z', 'a', 'x', 'a', 'x', 'c', 'b'] 要求去除数组中重复的元素。
// 1.目标: 把旧数组里面不重复的元素选取出来放到新数组中, 重复的元素只保留一个, 放到新数组中去重。
// 2.核心算法: 我们遍历旧数组, 然后拿着旧数组元素去查询新数组, 如果该元素在新数组里面没有出现过, 我们就添加, 否则不添加。
// 3.我们怎么知道该元素没有存在? 利用 新数组.indexOf(数组元素) 如果返回时 - 1 就说明 新数组里面没有改元素
// 封装一个 去重的函数 unique 独一无二的
function unique(arr) {
var newArr = [];
for (var i = 0; i < arr.length; i++) {
if (newArr.indexOf(arr[i]) === -1) {//数组不存在元素
newArr.push(arr[i]);//就加进去
}
}
return newArr;
}
// var demo = unique(['c', 'a', 'z', 'a', 'x', 'a', 'x', 'c', 'b'])
var demo = unique(['blue', 'green', 'blue'])
console.log(demo);
</script>

4.33 检查数组数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<script>
// 书写一个函数,判断指定数据是否存在于指定数组中
// 要求:
// 函数名称:exist
// 函数调用方式:exist(数据data,数组arr)
// 函数功能:判断“数据data”是否存在于“数组arr”中,如果是函数返回值为true,如果不是函数返回值为false
function exist(data, arr) {
for (var i = 0; i < arr.length; i++) {
if (data == arr[i]) {
return true
}
}
return false
}
console.log(exist(0, [1, 2, 3, 4, 5, 6]))
</script>

4.34 筛选数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<script>
// 以下有两个数组,一个数组arr是班级里所有的学员的名称,一个数组currentArr是提交了每日反馈的学员名单,
// 请创建一种算法,把未提交每日反馈的学员筛选出来
var arr = ["张瑞淑", "徐海涛", "谢岗岗", "薛鹏", "魏明杨", "党婷", "熊飞", "郑翠翠", "李航卫", "屈涛", "汪孝双", "代攀飞", "武志钰", "王亚龙", "周芙榕", "李涛", "郝颖", "文冲洋", "王旭拯", "胡佳豪", "寇晓丽", "马晓晗", "王思聪", "张绿", "李德", "郑萍", "张凯", "张嘉成", "葛云侠", "杨磊", "任变", "景德", "高卷林", "刘益凡", "赵娜", "陈章鸣", "张荣召", "赵凯旋", "程倩倩", "脱朝平", "刘吉利", "郭苗苗", "马建峰", "潘瑞", "闫翔", "马晨", "李轩轩", "黄红梅", "刘书彬", "罗强", "刘东", "王可可", "陈泽文", "李嘉琪", "段佳琦", "黄燕", "邱淑鸿", "宋翔宇", "王波", "樊琳", "王兆国", "许成", "李兴"];
var currentArr = ["张瑞淑", "徐海涛", "谢岗岗", "薛鹏", "魏明杨", "党婷", "熊飞", "郑翠翠", "李航卫", "屈涛", "汪孝双", "代攀飞", "武志钰", "王亚龙", "周芙榕", "李涛", "郝颖", "文冲洋", "王旭拯", "胡佳豪", "寇晓丽", "马晓晗", "张绿", "李德", "郑萍", "张凯", "张嘉成", "葛云侠", "杨磊", "任变", "景德", "高卷林", "刘益凡", "赵娜", "陈章鸣", "张荣召", "赵凯旋", "程倩倩", "脱朝平", "刘吉利", "郭苗苗", "马建峰", "潘瑞", "闫翔", "马晨", "李轩轩", "黄红梅", "刘书彬", "罗强", "刘东", "陈泽文", "李嘉琪", "段佳琦", "黄燕", "邱淑鸿", "宋翔宇", "王波", "樊琳", "王兆国", "许成", "李兴"];
function unique(data) {
var newArr = [];
for (var i = 0; i < data.length; i++) {
if (currentArr.indexOf(data[i]) === -1) {
newArr.push(data[i]);
}
}
return newArr;
}
console.log(unique(arr))
console.log(arr.length);
console.log(currentArr.length);
</script>

4.35 随机抽取

1
2
3
4
5
6
7
8
9
10
11
12
<script>
// 从以下学员名单中随机选出4个学员:
var arr = ["鹿晗", "王俊凯", "蔡徐坤", "彭于晏", "周杰伦", "刘德华", "赵本山"]
var str=[]
while(str.length<4){
var j=Math.floor(Math.random()*arr.length)
if(str.indexOf(arr[j])===-1){
str.push(arr[j])
}
}
console.log(str);
</script>

4.36 随机排序

1
2
3
4
5
6
7
8
9
10
11
12
<script>
// 对以下学员随机排序,生成一个新数组:
var arr = ["鹿晗", "王俊凯", "蔡徐坤", "彭于晏", "周杰伦", "刘德华", "赵本山"]
var newArr=[]
while(newArr.length<arr.length) {
var j=Math.floor(Math.random()*arr.length)
if(newArr.indexOf(arr[j])===-1){
newArr.push(arr[j])
}
}
console.log(newArr);
</script>