zoukankan      html  css  js  c++  java
  • js上 十七、数组-3

    十七、数组-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]];形成一个二维数组

    img

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

    img

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

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

    img

    实现:

    img

    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;证明不存在;那么就添加

    img

    3. 实现reverse封装

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

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

    img

    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()

    ​ 先排序;

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

    img

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

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

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

    img

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

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

    img

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

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

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

    img

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

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

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

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

    img

    #小结:

    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时,需要随机一个值,然后判断是否在新数组中,如果不再,则添加到新数组中。

  • 相关阅读:
    国外程序员整理的 C++ 资源大全
    31部黑客电影
    向windows添加环境变量
    windows 查看动态连接库和静态连接库的方法
    十大最值得注意的MySQL变量
    源码圈 300 胖友的书单整理
    82岁“极客”老人用云计算写族谱, 90后败给“30”后!
    Redis 实现队列http://igeekbar.com/igeekbar/post/436.htm
    借助CSS Shapes实现元素滚动自动环绕iPhone X的刘海
    听说程序猿的密码大多是这样滴~看完心累中。。。
  • 原文地址:https://www.cnblogs.com/yzy521/p/14132713.html
Copyright © 2011-2022 走看看