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

  • 相关阅读:
    (二分查找 拓展) leetcode 69. Sqrt(x)
    (二分查找 拓展) leetcode 162. Find Peak Element && lintcode 75. Find Peak Element
    (链表) lintcode 219. Insert Node in Sorted Linked List
    (二分查找 拓展) leetcode 34. Find First and Last Position of Element in Sorted Array && lintcode 61. Search for a Range
    (最短路 Floyd) P2910 [USACO08OPEN]寻宝之路Clear And Present Danger 洛谷
    (字符串 数组 递归 双指针) leetcode 344. Reverse String
    (二叉树 DFS 递归) leetcode 112. Path Sum
    (二叉树 DFS 递归) leetcode 101. Symmetric Tree
    (二叉树 递归) leetcode 144. Binary Tree Preorder Traversal
    (二叉树 递归 DFS) leetcode 100. Same Tree
  • 原文地址:https://www.cnblogs.com/yzy521/p/14132713.html
Copyright © 2020-2023  润新知