十七、数组-3

#课堂案例

\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]]

​ 方法一:利用slice()方法:注意slice()方法,截取后,不会改变数组

​ 分析:var arr = [1,2,3,4,5,6,7]

​ 二维数组的形成:先定义一个空数组 [] ; 然后从arr中截取一部分 [1,2] 添加到新数组中。[[1,2]];形成一个二维数组

l 实现:注意arr数组始终不变

​ 方法二:使用splice()方法实现:注意splice()方法,截取后,会改变数组

​ 分析:var arr = [1,2,3,4,5,6,7];想要拿到[1,2]; 可以用splice进行删除,arr.splice(0,2);删除后的返回值为[1,2];

实现:

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

题目:封装一个函数noRepeat(arr),实现将数组中重复的值只保留一个,且做升序排列,

例如:noRepeat(nums) 返回[1,2,3,5,6,7,8,9]

原理:定义一个新数组,利用indexOf()方法

遍历数组,判断数组的每一项是否在新数组中存在,如果不存在,就添加到新数组中;

即判断arr[i]在arrs中位置是否为-1;如果未-1;证明不存在;那么就添加

\3. 实现reverse封装

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

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

\4. 编写一个函数 unique(arr),返回一个去除数组内重复的元素的数组(不能使用indexof方法)例如:

unique([0, 1, 2, 2, 3, 3, 4]) // => [0, 1, 2, 3, 4]
unique([0, 1, '1', '1', 2]) // => [0, 1, '1', 2]
1
2

原理:利用splice()

​ 先排序;

​ 两两比较,如果全等,则删除其中一个;

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

原理:用数组的每一项和目标值进行对比,如果两个全等,那么就找到了。返回对应的下标;

如果循环结束了,还没有相等的,证明不存在,返回-1

\7. 封装一个排序方法, 可实现数组的内容从小到大排序(sort的封装)

冒泡原理:相邻两项进行比较,如果前一个大于后一个,那么交换一下位置;

8.题目:封装一个getMin(arr);实现找出数组中的最小值,以及最小值下标;

原理:声明一个变量min,保存最小值;

​ 然后用min和数组的每一项进行比较,如果发现数组项小于min,重新替换min

9.封装一个生成一个随机颜色的函数

分析:从0-9a-f中随机取6个值,和#拼接

注意:通过随机下标获取数组的随机值

随机下标:Math.floor(Math.random()*arr.length)

#小结:

\1. 掌握一维数组转二维数组 熟练的掌握splice()方法的返回值

\2. 如果需要找位置,或判断是否存在,用indexOf();利用返回值判断

\3. 熟练的掌握数组的去重方法

\4. 理解冒泡排序的原理

\5. 掌握如果获取数组或字符串的随机值

#作业:

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

1)例:arr1 = ['a', 'b'] arr2 =['b', 'a'],equal(arr1,arr2)的返回值为true

2)例:arr3 = [2,3] arr4=[3,4],equal(arr3,arr4)的返回值为false

分析:1)排序,2)判断两个数组对应下标的内容是否不等。即如果arr1[i]!==arr2[i];则表示有不相同的,返回false 。3)都相等,返回true

\2. 题目: 封装一个largestOfFour函数,将一个二维数组作为该函数的参数,这个二维数组中包含了4个小数组,分别找到每个小数组中的最大值,然后把它们串联起来,形成一个新数组。

调用:largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]**) // ** 返回值[5,27,39,1001]

**分析 ** :对每个子数组进行降序排列,然后将子数组的第一个值添加到新数组中

\3. 题目:完成getSum(),该函数接收1个数组作为参数,返回该数组中所有非重复数字的和;

例如:getSum([undefined,"23year",19,"097",1,"hello",null,1]) // return 20

分析:1)定义一个新数组;2)遍历数组的每一项,然后判断是否在新数组中存在,并且是数字,3)如果是添加到新数组中,并且,用sum加上当前遍历的项

\4. 题目:完成uniqueNums(),该函数接收1个参数n(一个不大于31的整数),其返回值是一个数组,该数组内是 n 个随机且不重复的整数,且整数取值范围是 [2, 32];

例如:uniqueNums(3) // return [19,7,10]

分析:1)定义一个新数组,2)当数组的长度不到3时,需要随机一个值,然后判断是否在新数组中,如果不再,则添加到新数组中。

js上 十七、数组-3的更多相关文章

  1. 多动手试试,其实List类型的变量在页面上取到的值可以直接赋值给一个js的Array数组变量

    多动手试试,其实List类型的变量在页面上取到的值可以直接赋值给一个js的Array数组变量,并且数组变量可以直接取到每一个元素var array1 = '<%=yearList =>'; ...

  2. 关于 js 2个数组取差集怎么取

    关于 js 2个数组取差集怎么取? 例如求var arr1 = [1]; var arr2 = [1,2];的差集方法一: Array.prototype.diff = function(a) { r ...

  3. JS中Array数组的三大属性用法

    原文:JS中Array数组的三大属性用法 Array数组主要有3大属性,它们分别是length属性.prototype属性和constructor属性. JS操作Array数组的方法及属性 本文总结了 ...

  4. js便利关联数组 及数组定义方式 分类

    "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv=& ...

  5. Js学习(3) 数组

    数组本质: 本质上数组是特殊的对象,因此,数组中可以放入任何类型的数据,对象,数组,函数都行 它的特殊性在于键名是按次序排列好的整数 从0开始,是固定的,不用指定键名 如果数组中的元素仍是数组,则为多 ...

  6. js怎样得出数组中某个数据最大连续出现的次数

     1:js怎样得出数组中某个数据最大连续出现的次数 var test=[1,2,3,3,2,2,2,3,3,3,3,5,3,3,3,3,3] ;    var j  = 0 ;    var max  ...

  7. js中的数组对象排序

    一.普通数组排序 js中用方法sort()为数组排序.sort()方法有一个可选参数,是用来确定元素顺序的函数.如果这个参数被省略,那么数组中的元素将按照ASCII字符顺序进行排序.如: var ar ...

  8. js开发:数组的push()、pop()、shift()和unshift()(转)

    js开发:数组的push().pop().shift()和unshift() 2017-05-18 11:49 1534人阅读 评论(0) 收藏 举报  分类: javascript开发(22)  版 ...

  9. js二维数组定义和初始化的三种方法总结

    js二维数组定义和初始化的三种方法总结 方法一:直接定义并且初始化,这种遇到数量少的情况可以用var _TheArray = [["0-1","0-2"],[& ...

随机推荐

  1. MySQL错误修复:Table xx is marked as crashed and last (automatic?) repair failed

    问题一 Table xx is marked as crashed and last (automatic?) repair failed 有开发找到我,说数据库坏了,连不上数据库,看了下 MySQL ...

  2. Echo Delay:FL中好用的声音制作处理方法

    今天来一起研究FL Studio的Echo Delay的作用,Echo Delay可以从MIDI输入创建回声,并允许我们通过音量,声像,切除和共振,音高和时间来操纵延迟. 图1:Echo Dealy ...

  3. iMindMap组织结构视图在工作上的应用体现在哪些方面

    iMindMap的组织结构图视图,可以将信息.想法和流程整合起来.本文,我们将讲述iMindMap组织结构图视图的3个实例应用. iMindMap组织结构视图 简化您的工作流程 通过在工作中构建组织结 ...

  4. python+selenium通过加载用户配置实现免登陆

    1查看profile路径 在Chrome地址栏访问chrome://version,可以查看个人资料存储位置: 2 python代码如下: from selenium import webdriver ...

  5. 【电子取证:镜像仿真篇】Windows Server镜像仿真、vmdk镜像仿真

    Windows Server镜像仿真.vmdk镜像仿真 时间过得真快呀!--[suy999] Windows Server镜像仿真.vmdk镜像仿真 一.qemu-img镜像转换工具 (一)raw.q ...

  6. Linun中配置redis密码

    这里以linux服务器为例,为redis配置密码. 1.第一种方式 (当前这种linux配置redis密码的方法是一种临时的,如果redis重启之后密码就会失效,) (1)首先进入redis,如果没有 ...

  7. 蓝桥杯——字母阵列(2018JavaC组第3题)

    字母阵列(18JavaC3) 标题:字母阵列 仔细寻找,会发现:在下面的8x8的方阵中,隐藏着字母序列:"LANQIAO". SLANQIAO ZOEXCCGB MOAYWKHI ...

  8. django项目运行步骤

    第一步: 创建gjango项目 django-admin startproject dname python manage.py startapps aname 第二部: 运行 -- 编辑设置 -- ...

  9. 「考试」noip模拟9,11,13

    9.1 辣鸡 可以把答案分成 每个矩形内部连线 和 矩形之间的连线 两部分 前半部分即为\(2(w-1)(h-1)\),后半部分可以模拟求(就是讨论四种相邻的情况) 如果\(n^2\)选择暴力模拟是有 ...

  10. 20200416_Centos 7.2 在安装系统之前把数据备份出来

    第一种方法: 起因: 服务器强制断电, 然后就再也启动不起来了, 进入救援模式, 一直卡死在 charoot /mnt/sysimages; 然后想在救援模式下的shell中挂载我的2T的移动硬盘, ...