JS的一些方便遍历数组的API函数

这些函数有的时候在学到后面的内容会遇到,看一些前端的视频的时候突然出现这些函数看到有点懵,现在就整合一下,然后以后看到这些函数就知道是干什么的了

1、箭头函数

没学完js的必须得先了解箭头函数

//它两一样
function fn(){
    console.log('damn')
}

() => { console.log('damn') }


//它三一样,一个参数可以省略(),多个参数不可以,没有参数也不可以
function fn(a){
    console.log(a)
}

(a) => { console.log(a) }

a => { console.log(a) }


//只有一个return的时候可以省略{},甚至可以省略return
function fn(x){
    return x+1
}

(x) => return x+1

x => x+1


//返回一个对象的时候,如果省略return的形式要用一个()包住return的值
//不然会把对象的{}误认为是函数体
function fn(){
    return { name: xxx , age: 18 }
}

() => return { name: xxx , age: 18 }

() => ({ name: xxx , age: 18 })


//箭头函数里有多个语句的时候就不可以一行显示,也不可以随便省略{}、return
function fn(a,b,c){
    c = a + b
    return c + 1
}

(a,b,c) => {
    c = a + b
    return c + 1
}

2、for-each

这是最简单的了,就是普通遍历数组

普通for循环:

let arr = [1,2,3,4]
for( let i=0; i<arr.length; i++ ) { 
    ...每遍历到一个要干什么 
}

for...in... 和 for...of...循环:

let arr = [1,2,3,4]
for(let i in arr ){
	console.log(i)  //i是字符串类型的数字索引  所以打印arr[i+1]会得一个undefined
}
for(let i of arr){
	console.log(i)  //i是值
}

for(let i =0;i<arr.length;i++){
	console.log(i)  //i是数字索引
}

let obj ={
	name:'boy'
}
for(let i in obj){
	console.log(i)  //i是字符串键名
}

那么for-each循环

let arr = ['a', 'b', 'c', 'd']
//forEach是函数,直接【数组名.forEach()】,然后里面写一个函数
arr.forEach(function (val, idx, arr) { //最多可以设置三个参数
    console.log(val + ', index = ' + idx) // val是当前元素,index当前元素索引,arr数组
    console.log(arr)
})
//输出:
a, index = 0
(4) ["a", "b", "c", "d"]
b, index = 1
(4) ["a", "b", "c", "d"]
c, index = 2
(4) ["a", "b", "c", "d"]
d, index = 3
(4) ["a", "b", "c", "d"]

//或者一个参数的时候,这个参数就代表数组里遍历到的每一个成员
arr.forEach(item => { //此时item代表arr数组每一个成员
    console.log(item)
})
//输出:['a','b','c','d']

3、map方法生成一个原数组修改过后的新数组

比如我要获得一个原数组每个成员*2的结果

用forEach方法,就要设一个新数组,然后遍历原数组,并把每次修改的结果装到新数组里

用map方法,直接用一个新数组接收一下,然后对原数组直接操作即可

具体对象数组例子:

(操作,在原数组的基础上,让price价格后面加上“元”,并多加一个属性“number:888”,)

(当然这里可以用“...item”代表数组里所有属性)

简写:

4、filter方法

遍历到数组每个成员,根据return的是true还是false,来决定返不返回当前遍历到的这个成员

return 的是true,当前这个成员就装进新数组

否则就丢掉不要

5、reduce方法得到一个数组最后的计算结果

老方法计算一个数组的总数:

现在用reduce计算:

reduce( )完整有2个参数,一个是一个return结果的函数,第二个是第一次计算的初始值

第一个函数参数里,完整要传4个参数:reduce( prev, current, index, arr )

分别代表( 上一次运算的结果, 当前遍历到的成员, 下标, 数组名字 ),其中后面两个参数可有可无

第二个参数一定不要漏了,一般初始值都是0,乘除的初始值一般是1

求最大值

求平均值

6、every方法:类似&&判断

里面传一个函数参数,进行一个判断并返回,如果数组每一个成员都符合这个判断条件,结果就是true;否则只要有一个成员不符合条件,就返回false

结果true

结果false

结果false

结果true

7、some方法:类似 || 判断

跟every( )相反,有一个符合要求就true,全都不符合才是false

结果true

结果false

8、include方法

字面意思,往里面传一个参数(而不是回调函数了),数组里有这个参数就true,没有就false

注意,只能对普通类型有效,对象这些没用

结果true

结果false

对数组、对象的结果无法判断

结果false

那怎么去比较一个数组里包不包含某个子数组?

用every( )配合include( )就行了,every可以遍历到子数组每一个成员,然后include可以查看子数组遍历到的成员在原数组里有没有,如果有一个没有就返回给every一个false,然后every最终判断为false

  • 24
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
内容简介 · · · · · · JavaScript 是近年来非常受瞩目的一门编程语言,它既支持面向对象编程,也支持函数式编程。本书专门介绍JavaScript函数式编程的特性。 全书共9章,分别介绍了JavaScript函数式编程、一等函数与Applicative编程、变量的作用域和闭包、高阶函数、由函数构建函数、递归、纯度和不变性以及更改政策、基于流的编程、类编程。除此之外,附录中还介绍了更多函数JavaScript。 本书内容全面,示例丰富,适合想要了解函数式编程的JavaScript程序员和学习JavaScript函数式程序员阅读。 作者简介 · · · · · · Michael Fogus是Dynamic Animation Systems的软件架构师,在分布式仿真、机器视觉和专家系统建设方面经验丰富。他是Clojure、ClojureScript以及Underscore-contrib的贡献者,还是《Clojure编程乐趣》的作者。 目录 · · · · · · 第1章 JavaScript函数式编程简介1 1.1 JavaScript案例1 1.2 开始函数式编程4 1.2.1 为什么函数式编程很重要4 1.2.2 以函数为抽象单元7 1.2.3 封装和隐藏9 1.2.4 以函数为行为单位10 1.2.5 数据抽象14 1.2.6 函数JavaScript初试17 1.2.7 加速19 1.3 Underscore示例22 1.4 总结23 第2章 一等函数与Applicative编程24 2.1 函数是一等公民24 2.2 Applicative编程30 2.2.1 集合中心编程31 2.2.2 Applicative编程的其他实例32 2.2.3 定义几个Applicative函数35 2.3 数据思考36 2.4 总结43 第3章 变量的作用域和闭包44 3.1 全局作用域44 3.2 词法作用域46 3.3 动态作用域47 3.4 函数作用域51 3.5 闭包52 3.5.1 模拟闭包53 3.5.2 使用闭包57 3.5.3 闭包的抽象59 3.6 总结60 第4章 高阶函数62 4.1 以其他函数为参数的函数62 4.1.1 关于传递函数的思考:max、finder和best63 4.1.2 关于传递函数的更多思考:重复、反复和条件迭代 (iterateUntil)65 4.2 返回其他函数函数67 4.2.1 高阶函数捕获参数69 4.2.2 捕获变量的好处69 4.2.3 防止不存在的函数:fnull72 4.3 整合:对象校验器74 4.4 总结77 第5章 由函数构建函数78 5.1 函数式组合的精华78 5.2 柯里化(Currying)83 5.2.1 向右柯里化,还是向左84 5.2.2 自动柯里化参数85 5.2.3 柯里化流利的API88 5.2.4 JavaScript柯里化的缺点89 5.3 部分应用89 5.3.1 部分应用一个和两个已知的参数91 5.3.2 部分应用任意数量的参数92 5.3.3 局部应用实战:前置条件93 5.4 通过组合端至端的拼接函数96 5.5 总结98 第6章 递归100 6.1 自吸收(self—absorbed)函数调用自己的函数)100 6.1.1 用递归遍历图105 6.1.2 深度优先自递归搜索106 6.1.3 递归和组合函数:Conjoin和Disjoin108 6.2 相互关联函数函数调用其他会再调用回它的函数)110 6.2.1 使用递归深克隆111 6.2.2 遍历嵌套数组112 6.3 太多递归了114 6.3.1 生成器117 6.3.2 蹦床原理以及回调120 6.4 递归是一个底层操作121 6.5 总结122 第7章 纯度、不变性和更改政策123 7.1 纯度123 7.1.1 纯度和测试之间的关系124 7.1.2 提取纯函数125 7.1.3 测试不纯函数的属性126 7.1.4 纯度与引用透明度的关系127 7.1.5 纯度和幂等性129 7.2 不变性130 7.2.1 如果一棵树倒在树林里,有没有声音?132 7.2.2 不变性与递归133 7.2.3 冻结和克隆134 7.2.4 在函数级别上观察不变性136 7.2.5 观察对象的不变性137 7.2.6 对象往往是一个低级别的操作140 7.3 控制变化的政策141 7.4 总结144 第8章 基于流的编程145 8.1 链接145 8.1.1 惰性链148 8.1.2 Promises152 8.2 管道154 8.3 数据流与控制流158 8.3.1 找个一般的形状161 8.3.2 函数可以简化创建action164 8.4 总结166 第9章 无类编程167 9.1 数据导向167 9.2 Mixins173 9.2.1 修改核心原型175 9.2.2 类层次结构176 9.2.3 改变层级结构179 9.2.4 用Mixin扁平化层级结构180 9.2.5 通过Mixin扩展新的语义185 9.2.6 通过Mixin混合出新的类型187 9.2.7 方法是低级别操作188 9.3.call(“Finis”);190 附录A 更多函数JavaScript191 A.1 JavaScript函数式库191 A.1.1 函数JavaScript191 A.1.2 Underscore—contrib192 A.1.3 RxJS192 A.1.4 Bilby194 A.1.5 allong.es195 A.1.6 其他函数式库196 A.2 能编译成JavaScript函数语言196 A.2.1 ClojureScript196 A.2.2 CoffeeScript197 A.2.3 Roy198 A.2.4 Elm198 附录B推荐书目

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值