JavaScript中的数组(Arrary)和Python中的列表(List)
在JS中的数组(Array)和Python中的列表(List)其实表现的是同一种数据结构,因为JavaScript和Python同为弱类型语言(或者说动态语言),因此两者之间在变量、数据类型以及方法上都有很多相似的地方(真的非常相似,专精于其中一种语言的朋友可以了解一下另一只语言)。本文就讲一讲Python中的高阶函数(map,filter,reduce)和JavaScript中对数组的迭代操作的一些异同(其实同更多一点)
高阶函数
符合以下两个条件之一的即是高阶函数:
- 接收一个函数作为参数
- 返回值为一个函数(的索引)
异同
在python中,高阶函数是一个面向所有可迭代对象使用的函数,而并非某种数据类型自带的方法。而在JavaScript里,高阶函数是作为方法封装在数组的原型中的,需要有具体的数组实例来调用才能实现。在JS和python中都有map()这个函数(方法),但是JS中的调用是这样的:
[1,2,3].map(function(){})
而python的使用是这样的
map(function,[1,2,3])
all()和every()
这两个函数的逻辑都是检查数组中的每一个元素,但是两者大有不同。先看两个函数的具体输入输出:
函数名 | 输入参数 | 输出 | 备注 | 语言 |
---|---|---|---|---|
all() | iterable | True或False | 如果iterable的所有元素不为0、''、False或者iterable为空,all()返回True,否则返回False; | Python |
every() | callback(element,index,array) element:用于测试的当前值 index:当前元素的索引 array:调用every的当前数组 |
true或false | 如果callback对每一项都返回 true,则返回 true,反之亦然 | JavaScript |
显然all()和every()最大的不同就是,在all()中,对于数组每一个元素的判断规则是固定的,即“的所有元素不为0、''、False或者iterable为空”,而every()则可以通过传入回调函数来自行决定判断规则。
any()和some()
和all()和every()的关系一样
函数名 | 输入参数 | 输出 | 备注 | 语言 |
---|---|---|---|---|
any() | iterable | True或False | 如果iterable中有任意一个元素不为0、''、False,any()返回True,否则返回False(包括iterable为空的情况); | Python |
some() | callback(element,index,array) element:用于测试的当前值 index:当前元素的索引 array:调用every的当前数组 |
true或false | 如果callback对任一项都返回 true,则返回 true。如果回调函数对所有项都返回false,则返回false | JavaScript |
未完待续。。
网友评论