JS 数据结构和算法(一)数组结构

1. 数组结构

常见方法
方法名方法描述
concat连接2个或更多数组,并返回结果
every对数组中的每一项运行给定函数,如果该函数对每一项都返回 true,则返回true, 否则返回false
filter对数组中的每一项运行给定函数,返回该函数会返回 true的项组成的数组
forEach对数组中的每一项运行给定函数。这个方法没有返回值
join将所有的数组元素连接成一个字符串
indexOf返回第一个与给定参数相等的数组元素的索引,没有找到则返回-1
lastIndexOf返回在数组中搜索到的与给定参数相等的元素的索引里最大的值
map对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组
reverse颠倒数组中元素的顺序,原先第一个元素现在变成最后一个,同样原先的最后一个元素变成了现在的第一个
slice传入索引值,将数组里对应索引范围内的元素作为新数组返回
some对数组中的每一项运行给定函数,如果任一项返回 true,则结果为true, 并且迭代结束
sort按照字母顺序对数组排序,支持传入指定排序方法的函数作为参数
toString将数组作为字符串返回
valueOftoString类似,将数组作为字符串返回
数组合并
  • 数组的合并非常简单, 使用concat即可(也可以直接+进行合并)

    // 数组的合并
    var nums1 = [1, 2, 3]
    var nums2 = [100, 200, 300]
    var newNums = nums1.concat(nums2)
    alert(newNums) // 1,2,3,100,200,300
    
    newNums = nums1 + nums2
    alert(newNums) // 1,2,3,100,200,300
    
迭代方法
  • every()方法

    • every()方法是将数组中每一个元素传入到一个函数中, 该函数返回true/false.
    • 全true返回true,有一个false则返回false,直接结束。
    // 定义数组
    var names = ["abc", "cb", "mba", "dna"]
    
    // 判断数组的元素是否都包含a字符
    var flag = names.every(function (t) {
        return t.indexOf('a') != -1
    })
    alert(flag)
    
  • some()方法

    • 有一个true则全true
  • some()练习

    // 定义数组
    var names = ["abc", "cb", "mba", "dna"]
    
    // 判断数组中是否包含有a字符的字符
    var flag = names.some(function (t) {
        alert(t)
        return t.indexOf("a") != -1
    })
    alert(flag)
    
  • forEach()方法

    • forEach()方法仅仅是一种快速迭代数组的方式而已.
    • 该方法不需要返回值
  • forEach的使用

    // 定义数组
    var names = ["abc", "cb", "mba", "dna"]
    
    // forEach的使用
    names.forEach(function (t) {
        alert(t)
    })
    
  • filter()方法

    • filter()方法是一种过滤的函数
    • 首先会遍历数组中每一个元素传入到函数中
    • 函数的结果返回true, 那么这个元素会被添加到最新的数组中, 返回false, 则忽略该元素.
    • 最终会形成一个新的数组, 该数组就是filter()方法的返回值
  • filter()的练习:

    // 定义数组
    var names = ["abc", "cb", "mba", "dna"]
    
    // 获取names中所有包含'a'字符的元素
    var newNames = names.filter(function (t) {
        return t.indexOf("a") != -1
    })
    alert(newNames) // "abc","mba","dna"
    
  • map()方法

    • map()方法提供的是一种映射函数.
    • 首先会遍历数组中每一个元素传入到函数中.
    • 元素会经过函数中的指令进行各种变换, 生成新的元素, 并且将新的元素返回.
    • 最终会将返回的所有元素形成一个新的数组, 该数组就是map()方法的返回值
  • map()练习:

    // 定义数组
    var names = ["abc", "cb", "mba", "dna"]
    
    // 在names中所有的元素后面拼接-abc
    var newNames = names.map(function (t) {
        return t + "-abc"
    })
    alert(newNames)
    
reduce方法
  • 我们单独拿出reduce方法, 因为这个方法相对来说难理解一点

  • 首先, 我们来看这个方法需要的参数:

    arr.reduce(callback[, initialValue])
    
  • 参数

    • callback(一个在数组中每一项上调用的函数,接受四个函数:)
      • previousValue(上一次调用回调函数时的返回值,或者初始值)
      • currentValue(当前正在处理的数组元素)
      • currentIndex(当前正在处理的数组元素下标)
      • array(调用reduce()方法的数组)
    • initialValue(可选的初始值。作为第一次调用回调函数时传给previousValue的值)
  • 有些晦涩难懂, 我们直接看例子

    • 求一个数字中数字的累加和
  • 使用for实现:

    // 1.定义数组
    var numbers = [1, 2, 3, 4]
    
    // 2.for实现累加
    var total = 0
    for (var i = 0; i < numbers.length; i++) {
        total += numbers[i]
    }
    alert(total) // 10
    
  • 使用forEach简化for循环

    • 相对于for循环, forEach更符合我们的思维(遍历数组中的元素)
    // 3.使用forEach
    var total = 0
    numbers.forEach(function (t) {
        total += t
    })
    alert(total)
    
  • 使用reduce方法实现

    // 4.使用reduce方法
    var total = numbers.reduce(function (pre, cur) {
        return pre + cur
    })
    alert(total)
    
  • 代码解析:

    • pre中每次传入的参数是不固定的, 而是上次执行函数时的结果保存在了pre中
    • 第一次执行时, pre为0 (默认值), cur为1
    • 第二次执行时, pre为1 (0+1, 上次函数执行的结果), cur为2
    • 第三次执行时, pre为3 (1+2, 上次函数执行的结果), cur为3
    • 第四次执行时, pre为6 (3+3, 上次函数执行的结果), cur为4
    • 当cur为4时, 数组中的元素遍历完了, 就直接将第四次的结果, 作为reduce函数的返回值进行返回.
  • 似乎和forEach比较没有太大的优势呢?

    • 通过这个代码你会发现, 你不需要在调用函数前先定义一个变量, 只需要一个变量来接收方法最终的参数即可.
    • 但是这就是优势吗? 不是, 优势在于reduce方法有返回值, 而forEach没有.
    • 这算什么优势? 如果reduce方法有返回值, 那么reduce方法本身就可以作为参数直接传递给另外一个需要reduce返回值的作为参数的函数. 而forEach中你只能先将每次函数的结果保存在一个变量, 最后再将变量传入到参数中.
    • 没错, 这就是最近非常流行的函数式编程. 也是为了几乎每个可以使用函数式编程的语言都有reduce这个方法的原因.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 内容概要 《计算机试卷1》是一份综合性的计算机基础和应用测试卷,涵盖了计算机硬件、软件、操作系统、网络、多媒体技术等多个领域的知识点。试卷包括单选题和操作应用两大类,单选题部分测试学生对计算机基础知识的掌握,操作应用部分则评估学生对计算机应用软件的实际操作能力。 ### 适用人群 本试卷适用于: - 计算机专业或信息技术相关专业的学生,用于课程学习或考试复习。 - 准备计算机等级考试或职业资格认证的人士,作为实战演练材料。 - 对计算机操作有兴趣的自学者,用于提升个人计算机应用技能。 - 计算机基础教育工作者,作为教学资源或出题参考。 ### 使用场景及目标 1. **学习评估**:作为学校或教育机构对学生计算机基础知识和应用技能的评估工具。 2. **自学测试**:供个人自学者检验自己对计算机知识的掌握程度和操作熟练度。 3. **职业发展**:帮助职场人士通过实际操作练习,提升计算机应用能力,增强工作竞争力。 4. **教学资源**:教师可以用于课堂教学,作为教学内容的补充或学生的课后练习。 5. **竞赛准备**:适合准备计算机相关竞赛的学生,作为强化训练和技能检测的材料。 试卷的目标是通过系统性的题目设计,帮助学生全面复习和巩固计算机基础知识,同时通过实际操作题目,提高学生解决实际问题的能力。通过本试卷的学习与练习,学生将能够更加深入地理解计算机的工作原理,掌握常用软件的使用方法,为未来的学术或职业生涯打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值