`
zhouyrt
  • 浏览: 1172048 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Perl与JS的比较(数组、哈希)

    博客分类:
  • Perl
 
阅读更多

上一篇列出了Perl中定义数组,对象的方式与JS的异同。这里继续补充数组,哈希的相关操作。

 

一、数组

可以对数组进行增删,插入。与JS不同的是这些函数都是全局的,JS则是挂在Array.prototype上。

1,对数组尾部的操作pop(删除最后的元素)、push(在尾部添加)

@goods = qw/pen pencil/; 
pop(@goods); # @goods 变成 (pen) 
push(@goods, 'brush'); # @goods 变为 (pen, brush)

 

在Perl中,函数调用时小括号是可选的(视上下文而定),就象前面使用的print。以下是等价的

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种方式获取

@goods = qw/pen pencil/; 
  
# 将数组变量赋值给一个标量变量 
$len = @goods; 
  
# 使用scalar函数 
$len = scalar(@goods); 
  
# 最后一个元素的索引加1 
$len = $#goods + 1;

 

7,遍历数组,Perl用foreach函数

@goods = qw/pen pencil brush/; 
  
# 默认的$_ 
foreach (@goods) { 
  print "$_"."\n"; 
} 
  
# 自定义变量 
foreach $item (@goods) { 
  print "$item"."\n"; 
}

 ES5可以用forEach

['pen', 'pencil', 'brush'].forEach(function(item) { 
    console.log(item) 
})

 

 

二、哈希

1,获取keys和values

%person = ( 
  name => 'Jack', 
  age  => 30, 
); 
@k = keys %person; # (name, age) 
@v = values $person; # ('Jack', 30)

 

ES5有Object.keys,但没有Object.values

person = { 
  name: 'Jack', 
  age: 30 
} 
Object.keys(person) // ['name', 'age']

 

2,获取键值对(key-value)数量(对Perl来说很容易)

%person = ( 
  name => 'Jack', 
  age  => 30, 
); 
$len = keys %person; # 2

 

对于JS来说,可能需要for in整个对象

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。

%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函数

%person = ( 
  name => 'Jack', 
  age  => 30, 
); 
if (exists $person{ndame}) { 
  print 'yes'; 
} else { 
  print 'no'; 
}

 JS用in运算符。

 

5,删除key,都用delete,但Perl是函数,JS是运算符

%person = ( 
  name => 'Jack', 
  age  => 30, 
); 
delete $person{'name'};

 

 

三、数组与哈希互换

Perl里哈希很容易就被转成数组

%person = ( 
  name => 'Jack', 
  age  => 30, 
); 
@arr = %person; # 将哈希转成数组 变成了('name', 'Jack', 'age', 30)

 

数组转成哈希

@nums = qw/zero 0 one 1 two 2/; 
%hash = @nums; 
while( ($k, $v) = each %hash ) { 
  print "$k: $v\n"; 
}

 打印如下

 

以上互换JS里没有原生支持,需自行实现。

 


 

 

e

  • 大小: 1.1 KB
分享到:
评论

相关推荐

    Perl与JS的对比分析(数组、哈希)

    Perl 和 JavaScript(JS)都是广泛使用的编程语言,虽然它们在语法和使用场景上有显著差异,但在处理数据结构如数组和哈希(JavaScript 中称为对象)时也有一些共通之处。下面我们将详细对比分析Perl和JS在数组和...

    神奇的perl两本perl入门教材合集

    3. **Perl语法基础**:包括变量、常量、数据类型(如标量、数组、哈希)的使用,以及字符串操作和正则表达式。 4. **流程控制**:讲解条件语句(if-else)、循环(while、for)以及分支结构(switch-case)等控制...

    24小时学会PERL

    4. **字符串和数组操作**:Perl支持灵活的字符串操作,如连接、查找、替换等,同时也提供了数组和关联数组(哈希)的概念,用于存储和处理多个数据项。 5. **正则表达式**:Perl的正则表达式功能强大,是其一大特色...

    Perl语言入门.pdf

    - **Web开发**:尽管随着Python和JavaScript的发展,Perl在这方面的应用有所减少,但它仍然是一种有效的Web开发工具。 - **科学计算**:Perl可以用来处理大量数据和进行复杂的计算。 5. **获取Perl及支持:** - ...

    perl高效编程

    1. **变量定义**:在Perl中,常见的变量类型包括标量(scalar)、数组(array)和哈希表(hash)。标量以`$`开头,数组以`@`开头,哈希表以`%`开头。 - 示例: ```perl $name = "John Doe"; # 标量 @colors = (...

    mongo-perl-bson:BSON规范的Perl实现http://bsonspec.org

    MongoDB 的 Perl 驱动程序是与数据库进行交互的重要工具,"mongo-perl-bson" 就是这样的一个模块,它实现了 BSON 规范的 Perl 版本。这个库允许 Perl 开发者在 MongoDB 中高效地处理数据,将 Perl 数据结构转换为 ...

    Talk-Perl-DestructAssign-Implementation:Slide for -- Perl mod

    综上所述,这篇内容将涉及Perl编程语言中的解构赋值概念,其具体实现方式,以及可能与JavaScript解构赋值的比较。通过分析提供的压缩包文件,我们可以学习到如何在Perl中使用和实现解构赋值,这对于理解和优化Perl...

    COMP9041-18S2:COMP9041软件构建2018S2

    Shell语法(三种类型的引号,条件,循环,测试...) Perl :Perl语法,特殊符号和特殊变量,函数(子例程)定义以及调用,字符串,数组和哈希数组。 Perl正则表达式和文件处理。 Perl模块和CPAN。 Git :版本控制和...

    PerlTraining:Perl 的培训课程库

    变量在Perl中扮演着重要角色,包括标量、数组、哈希等数据类型,它们帮助存储和操作数据。控制结构如if-else语句、循环(for、while)以及开关(switch)用于控制程序流程。函数是代码的可重用部分,Perl提供了内置...

    JavaScript 10分钟速成 (js-in-ten-minutes)

    ### JavaScript 10分钟速成 (js-in-ten-minutes) #### 概述 本指南由JavaScript专家Spencer Tipping撰写,旨在为已有一定JavaScript基础的学习者提供一个快速掌握高级特性的途径。对于那些了解其他函数式语言(如...

    JSON介绍.docx

    1. 名称/值对的集合:在各种语言中,这都是通过对象、记录、结构、字典、哈希表、键列表或关联数组的形式实现的。 2. 有序列表:在大多数语言中,这是通过数组、向量、列表或序列实现的。 JSON 中的对象: 1. 对象...

    yoda:Yoda-Ramda的Perl端口

    5. **函数式数据操作**:`yoda` 提供了一系列针对数组和哈希的操作函数,如 `pluck`(提取对象属性)和 `zipObj`(创建键值对数组)。这些函数使你能够以声明式的方式处理数据,而不是通过传统的循环和赋值语句。 6...

    华为-华为od题库练习题之字符串字符匹配.zip

    在某些编程语言中,如Perl、JavaScript和Python,都内置了正则表达式的支持。 6. 字符数组和字符串对象:理解不同编程语言中字符串和字符数组的区别和操作方式,例如C++中的std::string和字符数组,Java中的String...

    JSON浅谈-2

    JSON是一个完全独立于编程语言的文本格式,但其使用了许多类似C语言家族(包括C, C++, C#, Java, JavaScript, Perl, Python等)的约定。这使得JSON成为了一种理想的数据交换语言。 JSON的基本结构建立在两种构造之...

    JSON简介与格式

    尽管其名字来源于JavaScript,但JSON是完全语言无关的,它采用了C家族语言(如C、C++、C#、Java、JavaScript、Perl、Python等)程序员熟悉的表示方式。 JSON的核心构建块有两个: 1. 名/值对集合:在不同的语言中...

Global site tag (gtag.js) - Google Analytics