一、数组
可以对数组进行增删,插入。与JS不同的是这些函数都是全局的,JS则是挂在Array.prototype上。
1,对数组尾部的操作pop(删除最后的元素)、push(在尾部添加)
1 2 3 | @goods = qw/pen pencil/; pop ( @goods ); # @goods 变成 (pen) push ( @goods , 'brush' ); # @goods 变为 (pen, brush) |
在Perl中,函数调用时小括号是可选的(视上下文而定),就象前面使用的print。以下是等价的
1 2 | pop @goods ; # @goods 变成 pen push @goods , 'brush' ; # @goods 变为 (pen, brush) |
2,对数组首部的操作shift(删除第一个元素)、unshift(在首部添加元素)
3,任意位置删除或插入splice
4,逆序数组,Perl有reverse函数,JS没有对应函数。
5,排序数组sort,Perl和JS都有。
2,3,4,5提到的函数不贴演示代码了。
6,JS使用length属性获取数组长度,Perl不同,有3种方式获取
1 2 3 4 5 6 7 8 9 10 | @goods = qw/pen pencil/; # 将数组变量赋值给一个标量变量 $len = @goods ; # 使用scalar函数 $len = scalar ( @goods ); # 最后一个元素的索引加1 $len = $ #goods + 1; |
7,遍历数组,Perl用foreach函数
1 2 3 4 5 6 7 8 9 10 11 | @goods = qw/pen pencil brush/; # 默认的$_ foreach ( @goods ) { print "$_" . "\n" ; } # 自定义变量 foreach $item ( @goods ) { print "$item" . "\n" ; } |
ES5可以用forEach
1 2 3 | [ 'pen' , 'pencil' , 'brush' ].forEach(function(item) { console. log (item) }) |
二、哈希
1,获取keys和values
1 2 3 4 5 6 | %person = ( name => 'Jack' , age => 30, ); @k = keys %person ; # (name, age) @v = values $person ; # ('Jack', 30) |
ES5有Object.keys,但没有Object.values
1 2 3 4 5 | person = { name: 'Jack' , age: 30 } Object. keys (person) // [ 'name' , 'age' ] |
2,获取键值对(key-value)数量(对Perl来说很容易)
1 2 3 4 5 | %person = ( name => 'Jack' , age => 30, ); $len = keys %person ; # 2 |
对于JS来说,可能需要for in整个对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | function getObjLen(obj) { var len = 0 for (var a in obj) { if (obj.hasOwnProperty(a)) len++ } return len } var person = { name: 'Jack' , age: 30 } getObjLen(person) // 2 |
3,遍历对象
Perl有两种方式,一种while+each,一种获取keys再foreach。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | %person = ( name => 'Jack' , age => 30, ); # 方式1 while ( ( $k , $v ) = each %person ) { print "$k: $v" . "\n" ; } # 方式2 @keys = keys %person ; foreach ( @keys ) { print "$_: " . $person { $_ }. "\n" ; } |
JS一个for in即可。
4,判断某个key是否存在,Perl用exists函数
1 2 3 4 5 6 7 8 9 | %person = ( name => 'Jack' , age => 30, ); if ( exists $person {ndame}) { print 'yes' ; } else { print 'no' ; } |
JS用in运算符。
5,删除key,都用delete,但Perl是函数,JS是运算符
1 2 3 4 5 | %person = ( name => 'Jack' , age => 30, ); delete $person { 'name' }; |
三、数组与哈希互换
Perl里哈希很容易就被转成数组
1 2 3 4 5 | %person = ( name => 'Jack' , age => 30, ); @arr = %person ; # 将哈希转成数组 变成了('name', 'Jack', 'age', 30) |
数组转成哈希
1 2 3 4 5 | @nums = qw/zero 0 one 1 two 2/; %hash = @nums ; while ( ( $k , $v ) = each %hash ) { print "$k: $v\n" ; } |
打印如下
以上互换JS里没有原生支持,需自行实现。