1 capitalize
功能:将字符串的第一个字符转换为大写。
my_str = "i love python"。
result = my_str.capitalize()。
print(result)
结果:I love python。
登录后复制
2 center(width,fillchar)。
功能:返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格。如果width字符串长度,则结果返回原字符串。
my_str = "i love python"。
result = my_str.center(20,'*')。
print(result)
结果:***i love python****。
result = my_str.center(2,'*')。
print(result)
结果:i love python。
登录后复制

3 count(str, beg= 0,end=len(string))。
功能:返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数检查的字符串为:my_str[beg:end] beg下标可以取到,end下标取不到。
my_str = "i love python"。
result = my_str.count('o')。
print(result)
结果:2
my_str = "i love python"。
result = my_str.count('n',3,-1)。
print(result)
结果:0
登录后复制

4 bytes.decode(encoding=“utf-8”, errors=“strict”)。
功能:Python3 中没有 decode 方法,但我们可以使用但我们可以使用 bytes 对象的 decode()方法来解码给定的 bytes 对象,这个 bytes 对象可以由 str.encode() 来编码返回。
my_str = "i love python"。
result = my_str.encode(encoding="utf-8", errors="strict")。
result = result.decode(encoding="utf-8", errors="strict")。
print(result)
结果:i love python。
登录后复制
5 encode(encoding=‘UTF-8’,errors=‘strict’)。
功能: 以 encoding 指定的编码格式编码字符串,如果出错默认报一个ValueError 的异常,除非 errors 指定的是’ignore’或者’replace’
my_str = "i love python"。
result = my_str.encode(encoding="utf-8", errors="strict")。
print(result)
结果:b'i love python'。
登录后复制
6 endswith(suffix, beg=0, end=len(string))。
功能: 检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False.检查的字符串为:my_str[beg:end] beg下标可以取到,end下标取不到。
my_str = "i love python"。
result = my_str.endswith('n')。
print(result)
结果: True
result = my_str.endswith('o',0,-1)。
print(result)
结果: True
登录后复制

7 expandtabs(tabsize=8)。
功能:把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8 。
my_str = "i\tlove\tpython"。
print(my_str)
result = my_str.expandtabs(10)。
print(result)
结果:
i love python。
i love python。
登录后复制
8 find(str, beg=0 end=len(string)) 检测 str 是否包含在字符串中,
功能:如果指定范围 beg 和 end ,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1。
my_str = "i love python"。
result = my_str.find('o')。
print(result)
结果:3
result = my_str.find('n',0,-1)。
print(result)
结果:-1
登录后复制

9 index(str, beg=0, end=len(string))。
功能:跟find()方法一样,只不过如果str不在字符串中会报一个异常.。
my_str = "i love python"。
result = my_str.index('o',0,-1)。
print(result)
结果:3
result = my_str.index('n',0,-1)。
print(result)
结果:报错
登录后复制

10 isalnum()
功能:如果字符串至少有一个字符并且所有字符都是字母或数字则返 回 True,否则返回 False。
my_str = "i love python"。
result = my_str.isalnum()。
print(result)
结果:False
my_str = "ilovepython21"。
result = my_str.isalnum()。
print(result)
结果:True
登录后复制

11 isalpha()
功能:如果字符串至少有一个字符并且所有字符都是字母则返回 True, 否则返回 False。
my_str = "ilovepython"。
result = my_str.isalpha()。
print(result)
结果:True
my_str = "i2lovepython"。
result = my_str.isalpha()。
print(result)
结果:False
登录后复制

12 isdigit()
功能:如果字符串只包含数字则返回 True 否则返回 False…
my_str = "123456"。
result = my_str.isdigit()。
print(result)
结果:True
登录后复制
13 islower()
功能:如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False。
my_str = "i love python"。
result = my_str.islower()。
print(result)
结果:True
登录后复制
14 isnumeric()
功能: 如果字符串中只包含数字字符,则返回 True,否则返回 False(中文数字也可以)
my_str = "123456十贰二"。
result = my_str.isnumeric()。
print(result)
结果:True
登录后复制
15 isspace()
功能:如果字符串中只包含空白,则返回 True,否则返回 False.。
my_str = " "
result = my_str.isspace()。
print(result)
结果:True
登录后复制
16 istitle()
功能: 如果字符串是标题化的(见 title())则返回 True,否则返回 False。
my_str = "I Love U"。
result = my_str.istitle()。
print(result)
结果:True
登录后复制
17 isupper()
功能: 如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False。
my_str = "I LOVE U"。
result = my_str.isupper()。
print(result)
结果:True
登录后复制
18 join(seq)
功能: 以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串。
功能:将my_str 插入到 seq 每个字符之间。
my_str = "I LOVE U"。
result = my_str.join("Hey")。
print(result)
结果:HI LOVE UeI LOVE Uy。
登录后复制
19 len(string) 返回字符串长度。
my_str = “I LOVE U”
result = len(my_str)。
print(result)
结果:8
登录后复制
20 ljust(width[, fillchar])。
功能:返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格。
my_str = "i love python"。
result = my_str.ljust(20,'*')。
print(result)
结果:i love python*******。
登录后复制
21 lower()
功能:转换字符串中所有大写字符为小写.。
my_str = "I LOVE U"。
result = my_str.lower()。
print(result)
结果:i love u
登录后复制
22 lstrip()
功能:截掉字符串左边的空格或指定字符字符串一个一个匹配,如果发现与被截字符串左侧的字符相同,则截去该字符。
my_str = " I LOVE U"。
result = my_str.lstrip()。
print(result)
结果: I LOVE U
my_str = "ILOVEU"。
result = my_str.lstrip('I')。
print(result)
结果:LOVEU
my_str = "ILOVEU"。
result = my_str.lstrip('IALAAO')。
print(result)
结果:VEU
a = 'c:/svncode'。
b = 'c:/svncode/calendar'。
print(b.lstrip(a))。
登录后复制

strip方法只是比对字符并去除,而不是字符串!因此当b使用lstrip剩下’/calendar’的时候,会继续进行,a中有’/’,因此’/calendar’变成’calendar’,a中有’c’,因此’calendar’变成’alendar’。
23 maketrans()
功能: 创建字符映射的转换表,对于接受两个参数的最简单的调用方式,功能:第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。两个字符串的长度必须相同,为一一对应的关系。
intab = "aeiou"。
outtab = "12345"。
trantab = str.maketrans(intab, outtab)。
str1 = "this is string example....wow!!!"。
print (str1.translate(trantab))。
结果:th3s 3s str3ng 2x1mpl2....w4w!!!。
登录后复制
24 max(str)
功能: 返回字符串 str 中最大的字母。
my_str = "ILOVEUZ"。
result = max(my_str)。
print(result)
结果:Z
登录后复制
25 min(str)
功能:返回字符串 str 中最小的字母。
my_str = "AaILOVEUZ"。
result = min(my_str)。
print(result)
结果:A
登录后复制
26 replace(old, new [, max])。
功能:把将字符串中的 str1 替换成 str2,如果 max 指定,则替换不超过 max 次。
my_str = 'I make for you'。
result = my_str.replace('o','9',1)。
print(result)
结果: I make f9r you。
登录后复制
27 rfind(str, beg=0,end=len(string))。
功能:类似于 find()函数,不过是从右边开始查找.。
my_str = "i love python"。
result = my_str.rfind('o')。
print(result)
结果:11
result = my_str.rfind('o',0,4)。
print(result)
结果:3
登录后复制

28 rindex( str, beg=0, end=len(string))。
功能:类似于 index(),不过是从右边开始.。
my_str = "i love python"。
result = my_str.rindex('o')。
print(result)
结果:11
result = my_str.rindex('o',0,4)。
print(result)
结果:3
登录后复制

29 rjust(width,[, fillchar])。
功能:返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度 width 的新字符串。
my_str = "i love python"。
result = my_str.rjust(20,'*')。
print(result)
结果:*******i love python。
登录后复制
30 rstrip() 删除字符串字符串末尾的空格.。
功能:从"ILOVEU"尾部每一个字符开始,查找’IMVZEXU’是否含有该字符,若含有除"ILOVEU"中的该字符直到"ILOVEU"尾部对应的字符在’IMVZEXU’没有找到,停止截取操作。
my_str = "ILOVEU"。
result = my_str.rstrip('IMVZEXU')。
print(result)
结果:ILO
登录后复制
31 split(str="", num=string.count(str)) num=string.count(str))。
功能:以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num 个子字符串。
my_str = "IaLOVEaU"。
result = my_str.split('a',1)。
print(result)
结果:['I', 'LOVEaU']。
result = my_str.split('a')。
print(result)
结果:['I', 'LOVE', 'U']。
登录后复制
32 splitlines([keepends])。
功能:按照行(’\r’, ‘\r\n’, \n’)分隔,返回一个包含各行作为元素的列表:如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
my_str ='I\rLOVE\r\nUA\nA'。
result = my_str.splitlines()。
print(result)
结果:['I', 'LOVE', 'UA', 'A']。
result = my_str.splitlines(True)。
print(result)
结果:['I\r', 'LOVE\r\n', 'UA\n', 'A']。
登录后复制

33 startswith(str, beg=0,end=len(string))。
功能:检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查。
my_str = "I LOVE U"。
result = my_str.startswith('I')。
print(result)
结果: True
result = my_str.startswith('L',2,-1)。
print(result)
结果: True
登录后复制

34 strip([chars])。
功能:在字符串上执行 lstrip()和 rstrip(),前后同时开始截取操作。
my_str = "ILOVEU"。
result = my_str.strip('ILAEU')。
print(result)
结果: OV
登录后复制
35 swapcase()
功能: 将字符串中大写转换为小写,小写转换为大写。
my_str = "I love U"。
result = my_str.swapcase()。
print(result)
结果: i LOVE u
登录后复制
36 title()
功能: 返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())。
my_str = "I love U"。
result = my_str.title()。
print(result)
结果: i LOVE u
登录后复制
37 translate(table, deletechars="")。
功能: 根据 str 给出的表(包含 256 个字符)转换 string 的字符, 要过滤掉的字符放到 deletechars 参数中。
A_str = 'abcd'
B_str= '1234'
maketrans_code = str.maketrans(A_str,B_str)。
my_str = 'l like abcd'。
result = my_str.translate(maketrans_code)。
print(result)
结果: l like 123
登录后复制
38 upper()
功能: 转换字符串中的小写字母为大写。
my_str = "I love U"。
result = my_str.upper()。
print(result)
结果: I LOVE U
登录后复制
39 zfill (width)。
功能: 返回长度为 width 的字符串,原字符串右对齐,前面填充0。
my_str = "I love U"。
result = my_str.zfill(20)。
print(result)
结果: 000000000000I love U。
登录后复制
40 isdecimal()
功能: 检查字符串是否只包含十进制字符,如果是返回 true,否则返回 false。
my_str = "123"
result = my_str.isdecimal()。
print(result)
结果:True
宏经过预处理后会直接替换
那么 SUB(6) 会被替换为 (6)-(6) = 0。
所以上面的意思,其实 SUB(a) 就是0嘛。
其实,我怀疑你的那个宏是不是写错了。。。
使用键盘输入值并不是编辑表中值的唯一方式。在某些情况下,为了设置字段值,可能要对单条记录甚至是所有记录执行数学计算。您可以对所有记录或选中记录执行简单计算和高级计算。此外,还可以在属性表中的字段上计算面积、长度、周长和其他几何属性。以下各部分包括使用字段计算器的若干示例。使用 Python、SQL 和 Arcade 执行计算。
本主题着重于基于 Python 的计算字段示例。要了解有关 Arcade 表达式的详细信息,请参阅 ArcGIS Arcade 指南。要了解有关 SQL 表达式的详细信息,请参阅计算字段。
注:
Python 强制将缩进作为语法的一部分。请使用两个或四个空格来定义每个逻辑级别。将语句块的开头和结尾对齐并且保持一致。
Python 计算表达式字段将使用惊叹号 (!!) 括起。
命名变量时,请注意 Python 区分大小写,因此 value 不同于 Value。
输入语句后,如果想将其写入文件,请单击导出。导入按钮将提示您查找和选择一个现有的计算文件。
简单计算
仅通过一个短表达式就可以计算出多种计算结果。
简单字符串示例
一系列 Python 字符串函数均支持使用字符串,包括 capitalize、rstrip 和 replace。
将 CITY_NAME 字段中字符串的首字母大写。
!CITY_NAME!.capitalize()。
去掉 CITY_NAME 字段中自字符串结尾起的所有空白区。
!CITY_NAME!.rstrip()。
将 STATE_NAME 字段中的“california”全部替换为“California”。
!STATE_NAME!.replace("california", "California")。
在 Python 中,字符串字段中的字符可以通过索引和分割操作进行访问。索引操作将在索引位置提取字符,而分割操作则会提取一组字符。在下表中,假设 !fieldname! 是值为 "abcde" 的字符串字段。
示例
说明
结果
!fieldname![0]
第一个字符
"a"
!fieldname![-2]。
倒数第二个字符
"d"
!fieldname![1:4]。
第二、三和四个字符
"bcd"
Python 也支持使用 format() 方法的字符串格式。
将合并后的 FieldA 和 FieldB 以冒号分隔开。
"{}:{}".format(!FieldA!, !FieldB!)。
常见 Python 字符串操作。
简单数学示例
Python 提供了处理数字的工具。Python 也支持一些数值和数学函数,包括 math、cmath、decimal、random、itertools、functools 和 operator。
运算符
说明
示例
结果
x + y
x 加上 y
1.5 + 2.5
4.0
x - y
x 减去 y
3.3 - 2.2
1.1
x * y
x 乘以 y
2.0 * 2.2
4.4
x / y
x 除以 y
4.0 / 1.25
3.2
x // y
x 除以 y(向下取整除法)
4.0 // 1.25
3.0
x % y
x 模 y
8 % 3
-x
x 的负数表达式
x = 5
-x
-5
+x
x 不变
x = 5
+x
x ** y
以 x 为底,以 y 为指数的幂。
2 ** 3
乘
!Rank! * 2
根据给定的半径字段计算球体的体积。
4.0 / 3.0 * math.pi * !Radius! ** 3。
旧版本:
在 ArcGIS Pro 中,使用的是 Python 3,在 ArcGIS Desktop 中,使用的 Python 2。Python 2 使用的是整型数学计算,这就意味着两个整型值相除将始终生成整型值 (3 / 2 = 1)。在 Python 3 中,两个整型值相除将生成浮点型值 (3 / 2 = 1.5)。
Python 内置函数
Python 包含多个可用的内置函数,包括 max、min、round 和 sum。
Python 内置函数
通过字段列表计算每条记录的最大值。
max([!field1!, !field2!, !field3!])。
通过字段列表计算每条记录的总和。
sum([!field1!, !field2!, !field3!]) 使用代码块。
通过 Python 表达式和代码块参数可执行以下操作:
在表达式中应用任意 Python 函数。
访问地理处理函数和对象。
访问要素几何的属性。
访问新的随机值运算符。
使用 if-then-else 逻辑对值进行重分类。
表达式类型
代码块
Python 3
支持 Python 功能。使用 Python 函数 (def) 表示代码块。在适当的情况下,几何属性将通过地理处理对象表示(如点对象)。
Arcade
支持 Arcade 功能。
SQL
支持 SQL 表达式。
执行 SQL 表达式可以更好地支持使用要素服务和企业级地理数据库的计算,尤其是在性能方面。使用该表达式可以将单次请求设置为要素服务或数据库,而不必一次执行一个要素或一行的计算。
旧版本:
在 ArcGIS Desktop 中,计算字段工具支持 VB、PYTHON 和 PYTHON_9.3 表达式类型。VB 表达式类型,在某些产品中受支持,但在 64 位产品中不受支持,其中包括 ArcGIS Pro。
出于相后兼容性考量,ArcGIS Pro 中仍然支持 PYTHON 和 PYTHON_9.3 关键字,但是不会作为选择列出。使用这些关键字的 Python 脚本将可继续使用。
Python 3 表达式类型与旧版 PYTHON_9.3 关键字的唯一区别在于 Python 3 会将日期字段中的值作为 Python datetime 对象返回。
注:
Python 3 表达式类型与随 ArcGIS Pro 安装的 Python 版本无关。这只是历史上的第三个 Python 相关关键字(继 PYTHON 和 PYTHON_9.3 之后。
各 Python 函数可通过 def 关键字定义,关键字后为函数名称及函数的输入参数。可编写 Python 函数,使 Python 函数能够接受任何数量的输入参数(也可以没有任何参数)。函数将通过 return 语句返回值。函数名称可由您自行选取(不得使用空格,也不得以数字开头)。
注:
如果函数未通过 return 语句显式返回值,则函数将返回 None。
注:
请牢记,Python 强制要求将缩进作为语法的一部分。请使用四个空格来定义每个逻辑级别。将语句块的开头和结尾对齐并且保持一致。
代码示例 - 数学
在使用以下数学示例时,请假设表达式类型为 Python 3。
将字段的值四舍五入为保留两位小数。
表达式:
round(!area!, 2)。
通过 math 模块将米转换成英尺。以转换值为底,以 2 为指数进行幂运算,然后再乘以 area。
表达式:
MetersToFeet((float(!shape.area!)))。
代码块:
import math
def MetersToFeet(area):。
return math.pow(3.2808, 2) * area 通过 Python 逻辑计算字段。
可以使用 if、else 和 elif 语句将逻辑模式包含在代码块中。
按照字段值进行分类。
表达式:
Reclass(!WELL_YIELD!)。
代码块:
def Reclass(WellYield):。
if (WellYield >= 0 and WellYield <= 10):。
return 1
elif (WellYield > 10 and WellYield <= 20):。
return 2
elif (WellYield > 20 and WellYield <= 30):。
return 3
elif (WellYield > 30):。
return 4 代码实例 - 几何。
除以下代码示例外,请参阅下方的“几何单位转换”部分,以了解有关转换几何单位的详细信息。
计算某要素的面积。
表达式:
!shape.area!
计算某要素的最大 x 坐标。
表达式:
!shape.extent.XMax!。
计算某要素中的折点数。
表达式:
MySub(!shape!)
代码块:
def MySub(feat):。
partnum = 0
# Count the number of points in the current multipart feature。
partcount = feat.partCount。
pntcount = 0
# Enter while loop for each part in the feature (if a singlepart。
# feature, this will occur only once)。
while partnum < partcount:。
part = feat.getPart(partnum)。
pnt = part.next()。
# Enter while loop for each vertex。
while pnt:
pntcount += 1
pnt = part.next()。
# If pnt is null, either the part is finished or there。
# is an interior ring。
if not pnt:
pnt = part.next()。
partnum += 1
return pntcount。
将点要素类中每个点的 x 坐标平移 100。
表达式:
shiftXCoordinate(!SHAPE!)。
代码块:
def shiftXCoordinate(shape):。
shiftValue = 100。
point = shape.getPart(0)。
point.X += shiftValue。
return point 几何单位转换。
几何字段的面积和长度属性可通过用 @ 符号表示的单位类型进行修改。
面积测量单位关键字:
ACRES | ARES | HECTARES | SQUARECENTIMETERS | SQUAREDECIMETERS | SQUAREINCHES | SQUAREFEET | SQUAREKILOMETERS | SQUAREMETERS | SQUAREMILES | SQUAREMILLIMETERS | SQUAREYARDS | SQUAREMAPUNITS | UNKNOWN。
线性测量单位关键字:
CENTIMETERS | DECIMALDEGREES | DECIMETERS | FEET | INCHES | KILOMETERS | METERS | MILES | MILLIMETERS | NAUTICALMILES | POINTS | UNKNOWN | YARDS。
注:
如果数据存储在地理坐标系中且具有线性单位(例如英尺),则会通过测地线算法转换长度计算的结果。
警告:
转换地理坐标系中数据的面积单位会生成不正确的结果,这是由于沿 globe 的十进制度并不一致。
计算某要素的长度(以码为单位)。
表达式:
!shape.length@yards!。
计算某要素的面积(以英亩为单位)。
表达式:
!shape.area@acres!。
测地线面积和长度也可以通过带 @(后跟测量单位关键字)的 geodesicArea 和 geodesicLength 属性进行计算。
计算某要素的测地线长度(以码为单位)。
表达式:
!shape.geodesicLength@yards!。
计算某要素的测地线面积(以英亩为单位)。
表达式:
!shape.geodesicArea@acres! 代码实例 - 日期。
日期和时间可使用 datetime 和 time 模块进行计算。
计算当前日期。
表达式:
time.strftime("%d/%m/%Y")。
计算当前日期和时间。
表达式:
datetime.datetime.now()。
计算的日期为 2000 年 12 月 31 日。
表达式:
datetime.datetime(2000, 12, 31)。
计算当前日期和字段中的值之间的天数。
表达式:
(datetime.datetime.now() - !field1!).days。
通过向字段中的日期值添加 100 天来计算日期。
表达式:
!field1! + datetime.timedelta(days=100)。
计算字段中的日期值为一周中的周几(例如,星期天)。
表达式:
!field1!.strftime('%A') 代码实例 - 字符串。
可以使用多种 Python 编码模式来完成字符串计算。
返回最右侧三个字符。
表达式:
!SUB_REGION![-3:]。
将所有大写字母 P 替换为小写字母 p。
表达式:
!STATE_NAME!.replace("P","p")。
通过空格分隔符串连两个字段。
表达式:
!SUB_REGION! + " " + !STATE_ABBR! 转换为正确的大小写形式。
下列各例显示的是转换单词的不同方法,这些方法可使每个单词的首字母变为大写、其余字母变为小写。
表达式:
' '.join([i.capitalize() for i in !STATE_NAME!.split(' ')]) 表达式:
!STATE_NAME!.title() 正则表达式。
Python 的 re 模块提供了正则表达式匹配操作,可用于对字符串执行复杂的模式匹配和替换规则。
re - 正则表达式运算正则表达式的用法。
使用单词 Street 替换 St 或 St.,在字符串的末尾生成一个新单词。
表达式:
update_street(!ADDRESS!)。
代码块:
import re
def update_street(street_name):。
return re.sub(r"""\b(St|St.)\Z""",。
'Street',
street_name) 累加计算和顺序计算。
可以使用全局变量来进行累加计算和顺序计算。
根据某间隔值计算顺序 ID 或数字。
表达式:
autoIncrement()。
代码块:
rec=0
def autoIncrement():。
global rec
pStart = 1 # adjust start value, if req'd。
pInterval = 1 # adjust interval value, if req'd。
if (rec == 0):
rec = pStart
else:
rec = rec + pInterval。
return rec
计算数值型字段的累加值。
表达式:
accumulate(!FieldA!)。
代码块:
total = 0
def accumulate(increment):。
global total
if total:
total += increment。
else:
total = increment。
return total
计算数值型字段的百分比增量。
表达式:
percentIncrease(float(!FieldA!))。
代码块:
lastValue = 0
def percentIncrease(newValue):。
global lastValue。
if lastValue:
percentage = ((newValue - lastValue) / lastValue) * 100。
else:
percentage = 0
lastValue = newValue。
return percentage 随机值。
可以使用 random 模块来计算随机值。
通过 numpy 站点包来计算 0.0 和 1.0 之间的随机浮点值。
表达式:
getRandomValue()。
代码块:
import numpy
def getRandomValue():。
return numpy.random.random()。
使用随机模块来计算 0 与 10 之间的随机整数。
表达式:
random.randint(0, 10)。
代码块:
import random 计算空值。
在 Python 表达式中,可通过 Python None 来计算空值。
注:
仅当该字段为空时,才可以进行以下计算。
使用 Python None 计算空值。
表达式:
None 相关主题
有关字段计算的基础知识
授权转载:gisoracle
网课学习 + 权威结业证书
我们精心汇总了一些相对简单
培训考核通过便可获取的证书
自然资源部职鉴中心发证
可用于招投标、资质系统
等
测绘师继续教育20学时
中国测绘网新媒体中心
cehui8@qq.com
商务合作/微信 214979525。
#menu width:860px;。
#nav .mainlevel ul *width:1024px;/*IE is great need,。
今天小编要跟大家分享的文章是关于Web前端工程师要掌握的JavaScript代码片段(一)。正在从事web前端工作的小伙伴们来和小编一起看一看吧,希望本篇文章能够对正在从事web前端工作的小伙伴们有所帮助。
1、Anagramsofstring(带有重复项)。
使用递归。对于给定字符串中的每个字母,为字母创建字谜。使用map()将字母与每部分字谜组合,然后使用reduce()将所有字谜组合到一个数组中,最基本情况是字符串长度等于2或1。
constanagrams=str=>{。
if(str.length[str];。
returnstr.split('').reduce((acc,letter,i)=>。
acc.concat(anagrams(str.slice(0,i)+str.slice(i+1)).map(val=>。
letter+val)),[]);。
};
//anagrams('abc')->['abc','acb','bac','bca','cab','cba']。
2、数组平均数
使用reduce()将每个值添加到累加器,初始值为0,总和除以数组长度。
constaverage=arr=>arr.reduce((acc,val)=>acc+val,0)/。
arr.length;
//average([1,2,3])->2。
3、大写每个单词的首字母
使用replace()匹配每个单词的第一个字符,并使用toUpperCase()来将其大写。
constcapitalizeEveryWord=str=>str.replace(/\b[a-z]/g,char=>。
char.toUpperCase());。
//capitalizeEveryWord('helloworld!')->'HelloWorld!'。
4、首字母大写
使用slice(0,1)和toUpperCase()大写第一个字母,slice(1)获取字符串的其余部分。省略lowerRest参数以保持字符串的其余部分不变,或将其设置为true以转换为小写。(注意:这和上一个示例不是同一件事情)。
constcapitalize=(str,lowerRest=false)=>。
str.slice(0,1).toUpperCase()+(lowerRest?str.slice(1).toLowerCase():。
str.slice(1));
//capitalize('myName',true)->'Myname'。
5、检查回文
将字符串转换为toLowerCase(),并使用replace()从中删除非字母的字符。然后,将其转换为tolowerCase(),将('')拆分为单独字符,reverse(),join(''),与原始的非反转字符串进行比较,然后将其转换为tolowerCase()。
constpalindrome=str=>{。
consts=str.toLowerCase().replace(/[\W_]/g,'');。
returns===s.split('').reverse().join('');。
//palindrome('tacocat')->true。
6、计数数组中值的出现次数
每次遇到数组中的特定值时,使用reduce()来递增计数器。
constcountOccurrences=(arr,value)=>arr.reduce((a,v)=>v===。
value?a+1:a+0,0);。
//countOccurrences([1,1,2,1,2,3],1)->3。
7、当前URL
使用window.location.href来获取当前URL。
constcurrentUrl=_=>window.location.href;。
//currentUrl()->'https://google.com'。
8、Curry
使用递归。如果提供的参数(args)数量足够,则调用传递函数f,否则返回一个curried函数f。
constcurry=(fn,arity=fn.length,...args)=>。
arity
?fn(...args)
:curry.bind(null,fn,arity,...args);。
//curry(Math.pow)(2)(10)->1024。
//curry(Math.min,3)(10)(50)(2)->2。
9、Deepflattenarray。
使用递归,使用reduce()来获取所有不是数组的元素,flatten每个元素都是数组。
constdeepFlatten=arr=>。
arr.reduce((a,v)=>a.concat(Array.isArray(v)?deepFlatten(v):v),。
[]);
//deepFlatten([1,[2],[[3],4],5])->[1,2,3,4,5]。
10、数组之间的区别
从b创建一个Set,然后在a上使用Array.filter(),只保留b中不包含的值。
constdifference=(a,b)=>{consts=newSet(b);returna.filter(x。
=>!s.has(x));};。
//difference([1,2,3],[1,2])->[3]。
11、两点之间的距离
使用Math.hypot()计算两点之间的欧几里德距离。
constdistance=(x0,y0,x1,y1)=>Math.hypot(x1-x0,y1-y0);。
//distance(1,1,2,3)->2.23606797749979。
12、可以按数字整除
使用模运算符(%)来检查余数是否等于0。
constisDivisible=(dividend,divisor)=>dividend%divisor===0;。
//isDivisible(6,3)->true。
13、转义正则表达式
使用replace()来转义特殊字符。
constescapeRegExp=str=>str.replace(/[.*+?^${}()|[\]\\]/g,。
'\\$&');
//escapeRegExp('(test)')->\\(test\\)。
14、偶数或奇数
使用Math.abs()将逻辑扩展为负数,使用模(%)运算符进行检查。如果数字是偶数,则返回true;如果数字是奇数,则返回false。
constisEven=num=>num%2===0;。
//isEven(3)->false。
15、阶乘
使用递归。如果n小于或等于1,则返回1。否则返回n和n-1的阶乘的乘积。
constfactorial=n=>n。
//factorial(6)->720。
16、斐波那契数组生成器
创建一个特定长度的空数组,初始化前两个值(0和1)。使用Array.reduce()向数组中添加值,后面的一个数等于前面两个数相加之和(前两个除外)。
constfibonacci=n=>。
Array(n).fill(0).reduce((acc,val,i)=>acc.concat(i>1?acc[i-。
1]+acc[i-2]:i),[]);。
//fibonacci(5)->[0,1,1,2,3]。
17、过滤数组中的非唯一值
将Array.filter()用于仅包含唯一值的数组。
constfilterNonUnique=arr=>arr.filter(i=>arr.indexOf(i)===。
arr.lastIndexOf(i));。
//filterNonUnique([1,2,2,3,4,4,5])->[1,3,5]。
18、Flatten数组
使用reduce()来获取数组中的所有元素,并使用concat()来使它们flatten。
constflatten=arr=>arr.reduce((a,v)=>a.concat(v),[]);。
//flatten([1,[2],3,4])->[1,2,3,4]。
19、从数组中获取最大值
使用Math.max()与spread运算符(...)结合得到数组中的最大值。
constarrayMax=arr=>Math.max(...arr);。
//arrayMax([10,1,5])->10。
20、从数组中获取最小值
使用Math.min()与spread运算符(...)结合得到数组中的最小值。
constarrayMin=arr=>Math.min(...arr);。
//arrayMin([10,1,5])->1。
21、获取滚动位置
如果已定义,请使用pageXOffset和pageYOffset,否则使用scrollLeft和scrollTop,可以省略el来使用window的默认值。
constgetScrollPos=(el=window)=>。
({x:(el.pageXOffset!==undefined)?el.pageXOffset:el.scrollLeft,。
y:(el.pageYOffset!==undefined)?el.pageYOffset:el.scrollTop});。
//getScrollPos()->{x:0,y:200}。
22、最大公约数(GCD)
使用递归。基本情况是当y等于0时。在这种情况下,返回x。否则,返回y的GCD和x/y的其余部分。
constgcd=(x,y)=>!y?x:gcd(y,x%y);。
//gcd(8,36)->4。
23、Headoflist
返回ARR[0]
consthead=arr=>arr[0];。
//head([1,2,3])->1。
24、list初始化
返回arr.slice(0,-1)。
constinitial=arr=>arr.slice(0,-1);。
//initial([1,2,3])->[1,2]。
以上就是小编今天为大家分享的关于Web前端工程师要掌握的JavaScript代码片段(一)的文章,希望本篇文章能够对正在从事web前端工作的小伙伴们有所帮助。想要了解更多web前端相关知识和想要了解后面的代码片段的小伙伴,记得关注北大青鸟web培训官网。