十六、数组-2

#4.3万能法:splice():

#4.3.1.删除功能

​ 语法:arr.splice(index,num); //num表示删除的长度

​ 功能:从下标index位置开始,删除num个元素;0

​ 返回值:被删除项组成的数组;

#4.3.2.添加功能

语法:**arr.splice(index, ** **0 ** ,val1,val2..);

​ 功能:在下标index位置,添加多个元素

​ 返回值:空数组;[ ] 因为没有删除,所以数组为空

#4.3.3.替换功能

语法:arr.splice(index,num,val1,val2...)

​ 功能:先删除后添加; 从index 位置开始,先删除num个元素,再添加多个新元素;

​ 返回值:被删除项组成的数组;

#5.1. 数组的反转:reverse

语法:arr.reverse();

功能:数组的反转;

返回值:反转后的数组;

说明:这个方法会改变原数组;

#5.2. 数组排序:sort

语法:arr.sort(function(a,b){return a-b});

​ 功能:数组的排序:

​ 说明:1)如果返回a-b,升序 返回b-a 降序;

​ 2)如果sort方法不传参,表示按照字符串的方式排序;

​ 3)这个方法会改变原数组;

第二个值减第一个值

不传参

#5.3. 数组的合并 concat:

语法:arr1.concat(arr2,arr3....);

功能:将多个数组内容拿出来,合并成一个新数组;

说明:不会改变原数组;

返回值:合并后的新数组;

#5.4. 数组的截取方法 slice:

​ 语法:arr.slice(start,end);

返回值:返回截取的内容;

说明:1)slice的截取时,包含开始位置,不包含截取位置;

​ 2)arr.slice(start,end);//从开始start位置截取到end位置,不包含结束位置

​ 3)arr.slice(start);//从开始位置一直截取最后

​ 4)arr.slice();//不传参:表示,截取整个数组;

​ 5)slice();支持负值;

​ 6)slice()不会改变原数组

传两个参数:

传一个参数

不参数:

参数为负值:

#5.5. 数组的查找方法

#indexOf() 从前向后找

语法:**arr.indexOf( ** 目标值(val),开始查找的位置(index));

​ 功能:从index位置开始,向后查找val首次出现的位置,

​ 返回值:如果找到,返回val的下标,如果找不到,返回-1;

​ 说明:1)indexOf()不会改变原数组;

2) 如果不传第二个参数,默认表示从下标为0开始查找;

#lastIndexOf() 从后向前找

语法:**arr.lastIndexOf( ** 目标值(val),开始查找的位置(index));

​ 功能:从index位置开始,向前查找val出现的位置;

​ 返回值:如果找到,返回val的下标,如果找不到,返回-1;

​ 说明:1)lastIndexOf()不会改变原数组;

​ 2)如果不传第二个参数,默认表示从最后一个下标开始向前查找

#5.6. 数组转字符串 join:

语法:**arr.join(" ** 连接符");

功能:将数组的每一项通过连接符,拼接为一个新字符串;

返回值:字符串;

说明:1)join()不会改变原数组;

​ 2)当join()不传参数时,默认用逗号连接;

#6. 二维数组:

前面我们讨论的都是一维数组。

在实际开发中, 经常需要用到二维数组或是多维数组。

但是,在js中,并不存在真正的多维数组。

js中:

ü 有数组的,

ü 数组中的元素,其数据类型是任意的

如果我们在数组中存放的元素,本身刚好又是一个数组。这就得到了一个二维数组。

Js中的解决方案,利用一维数组及其特性来模拟二维数组。

#问题1:如何访问这些元素呢?

#问题2:需要遍历所有的元素

#7. 案例:

案例1:将arrs中所有的数字乘以5,返回[30,25,15]

案例2:写一个函数,将这个数组中所有的一位数前面补0,输出一个新数组,即最后返回

案例3:写一个函数bouncer(),实现将数组中的真值,添加到一个新数组中;

案例4。模拟pop方法:

案例5:模拟push方法

案例6:封装一个函数实现将二维数组转一维数组;

#小结:

\1. splice()方法有删除、添加、替换功能

\2. reverse()数组的反转

\3. sort()数组的排序,注意sort方法的参数

\4. concat()合并多个数组

\5. slice()数组的截取方法;注意slice的参数

\6. 数组的查找方法:indexOf()从前往后找, lastIndexOf()从后往前找 ;找到返回下标,找不到返回-1

\7. Join()数组转字符串;如果不传参,默认用逗号连接

\8. 不会改变原数组的方法:indexOf() lastIndexOf() slice() concat() join();

\9. 会改变原数组的方法:push() unshift() pop() shift() splice() reverse() sort()

#作业

\1. 一维数组中转二维数组(思考)

题目:封装一个chunk(arr,size)的函数,把该数组arr按照指定的size分割成若干个数组块。

例如:chunk([1,2,3,4],2) 返回结果:[[1,2],[3,4]]

​ chunk([1,2,3,4,5],3) 返回结果:[[1,2,3],[4,5]]

分析:利用splice方法

倒推:结果:[[1,2],[3,4]] ;

  1. 可以定义一个 [ ]

  2. 将[1,2] 和 [3,4]分别添加到定义的一维数组,形成一个二维数组

  3. 那么如何得到这两个子数组? 截取,删除

  4. Splice(index,size);我们可以从下标为0的位置开始删除size个元素,而其返回值就是我们需要的子数组;

思路:1)定义一个函数,传两个参数

2创建一个空数组,//存放子数组

​ 3.循环删除,添加(当二维数组有元素:就需要删除指定长度的元素,然后将删除的内容添加到新数组中)

​ 4.返回新数组;

2、 var nums = [1,5,9,5,3,6,1,8,9,2,7,6];

题目: 将数组中重复的值只保留一个,且做升序排列,返回[1,2,3,5,6,7,8,9]

分析:定义一个空数组 ; 然后拿着nums中的每一个值,,取新数组中查看是否存在,如果不存在,就添加到新数组中

思考:如何判断是否存在?

IndexOf()方法,找值,找到返回下标,找不到返回-1;即如果一个值再再数组中的位置为-1;证明它不在数组中

3、 封装一个函数实现数组的拷贝(复制)

分析:从下标为0的位置开始遍历(正序遍历)然后利用push()实现

分析2:从最后一个下标开始遍历(倒序遍历)然后利用unshift()实现

分析3:使用concat实现

分析4:赋值

4、、实现reverse封装

分析:从下标为0的位置开始遍历(正序遍历);然后利用unshift()实现

分析2:从最后一个下标开始遍历(倒序遍历);然后利用push()实现

5、、indexOf的完整封装

封装一个函数,检测一个值在数组中出现的位置,如果没有出现返回-1,否则返回值在数组中出现的索引。

原理:用目标是和数组的每一项进行全等比较,如果全等,返回对应的数组下标

如果循环结束都没找到,返回-1

注意:循环的初始值 (indexOf的第二个参数)

js上 十六、数组-2的更多相关文章

  1. js上 十五、数组-1

    十五.数组-1 #1.什么是数组 组:由多个成员构成的一个集体. 数组:数组是值的有序集合 值就是前面所讲过的这些数据(各种数据类型的都可以) 是数组中,每一个值(如100,'js',true)都称之 ...

  2. js上 十九、综合案例

    十九.综合案例 题目一: 封装一个函数equal(a1,a2),传入两个一维数组,判断两个数组是否包含相同的元素,如果相等,函数的返回值为true, 不相等,函数的返回值为false 1)例:arr1 ...

  3. Java基础之十六 数组

    数组:可以创建并组装它们,通过使用整型索引值访问它们的元素,并且它们的尺寸不能改变. 16.1 数组为什么特殊 数组与其他种类的容器之间的区别有三方面:效率,类型和保存基本类型的能力. 数组是一种效率 ...

  4. js上 十四、对象

    十四.对象 #1.初识对象 什么是对象? 在js中,一切皆是对象. 对象,生活中可见和不可见的东西,在世界中,客观存在的都是一个对象. 桌子,笔记本,手机,人. 在日常生活中,我们是如何来描述这个对象 ...

  5. js之oop <六>数组的crud(增删改)

    增 Create: push(); 向数组尾添加元素 var arr = [2,6,8,7,4]; arr.push(100); console.log(arr); //输出 [2,6,8,7,4,1 ...

  6. js上 十八、字符串

    十八.字符串 #18.1.认识字符串 #什么是字符串 字符串可以是引号中的任意文本.字符串可以由双引号(")或单引号(')表示 ,如 'hello' , "中国" #为什 ...

  7. js上 十七、数组-3

    十七.数组-3 #课堂案例 \1. 封装一个chunk(arr,size)的函数,把该数组arr按照指定的size分割成若干个数组块. 例如:chunk([1,2,3,4],2) 返回结果:[[1,2 ...

  8. js上 十二、函数初步-1

    11-1.引入(认识函数) ​ 引入: 说起函数,其实我们并不陌生,在初中数学中我们就接触过函数:例如我们所学的 y = 2X+1 ; 这是一个二元一次方程,也是我们数字中的函数: ​ 当我们每次输入 ...

  9. js上 十、循环语句-1:

    十.循环语句-1: 非常之重要. 作用:重复执行一段代码 ü while ü do...while ü for 它们的相同之处,都能够实现循环. 不同的地方,格式不一样,使用的场景略有不同. #10- ...

随机推荐

  1. unctf2020 部分简单题题解

    unctf2020 水一波简单题..菜狗前来报道..大佬轻喷..如果有时间做题就好了呜呜呜 misc 1.baba_is_you 题目告诉我们,了解png文件格式. 下载得到一张png格式的图片. 用 ...

  2. FL Studio带你走进混音的世界

    混音,是把多种音源整合到一个立体音轨或单音音轨中,通俗讲就是对多种声音进行调整后叠加在一起,这样可以让音乐听起来非常有层次感,尤其是在电音制作过程中,混音的质量更是起到了决定性的作用.音乐制作软件FL ...

  3. 教你用Vegas Pro制作视频的遮罩转场特效

    很多小伙伴在接触了Vegas之后,都想利用Vegas制作出各种酷炫的特效.小编也是一样. 今天,小编就和大家分享一下,小编近期学会的遮罩转场特效. 首先想要制作遮罩转场效果,需要的素材有:至少两个图片 ...

  4. Codeforces Round #677 (Div. 3) E、G题解

    E. Two Round Dances #圆排列 题目链接 题意 \(n\)(保证偶数)个人,要表演一个节目,这个节目包含两种圆形舞蹈,而每种圆形舞蹈恰好需要\(n/2\)个人,每个人只能跳一种圆形舞 ...

  5. Java基础教程——线程池

    启动新线程,需要和操作系统进行交互,成本比较高. 使用线程池可以提高性能-- 线程池会提前创建大量的空闲线程,随时待命执行线程任务.在执行完了一个任务之后,线程会回到空闲状态,等待执行下一个任务.(这 ...

  6. 安全的字符串拷贝strcpy_s的实现与理解

    在C标准库中提供了字符串拷贝函数strcpy,而微软则为为它提供了一个更安全的版本strcpy_s,其函数原型为 errno_t __cdecl strcpy_s( char* _Destinatio ...

  7. 冲刺随笔——Day_Five

    这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 团队进行Alpha冲刺 作业正文 正文 其他参考文献 无 ...

  8. 孪生网络入门(上) Siamese Net及其损失函数

    最近在多个关键词(小数据集,无监督半监督,图像分割,SOTA模型)的范畴内,都看到了这样的一个概念,孪生网络,所以今天有空大概翻看了一下相关的经典论文和博文,之后做了一个简单的案例来强化理解.如果需要 ...

  9. PyQt转换显示Python-OpenCV图像实现图形化界面的视频播放

    ☞ ░ 前往老猿Python博文目录 ░ 一.引言 在Python-OpenCV中显示图像时调用的是一个单独的窗口,有时我们需要将这些图像显示在PyQt的图形化界面上,这样就可以将整个图像显示与PyQ ...

  10. 第8.2节 Python类的__init__方法深入剖析:构造方法案例详解

    前面一节介绍了构造方法定义的语法,并进行了语法解释说明,本节将通过案例来说明构造方法参数传递及返回值的情况. 一.    案例说明 本节定义一个汽车类,它有四个实例变量:wheelcount, pow ...