1. ホーム
  2. スクリプト・コラム
  3. パール

PerlとJSの比較 (配列、ハッシュ)

2022-01-03 03:39:18

前回は、Perlの配列やオブジェクトの定義方法とJSの類似点・相違点を挙げました。ここでは、引き続き配列とハッシュに関する操作を追加していきます。

I. 配列

配列は、追加、削除、挿入が可能です。これらの関数がグローバルであるJSとは異なり、JSはArray.prototypeにフックされています。

1、配列の末尾に対する操作 pop(末尾の要素を削除)、push(末尾に追加)。

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


Perlでは,関数呼び出しでは括弧はオプションである(文脈による)。

pop @goods; # @goods becomes pen 
push @goods, 'brush'; # @goods becomes (pen, brush) 


2、配列のheadに対する操作 shift(最初の要素を削除)、unshift(要素をheadに追加)。

3, 任意の位置でのスプライスの削除または挿入

4、配列の逆順、Perlにはreverse関数があるが、JSには同等のものがない。

5、ソートされた配列のソート、PerlにもJSにもあります。

2,3,4,5で紹介した関数は、デモコードとして掲載していません。

6, JSでは配列の長さを取得するためにlengthプロパティを使用しますが、Perlは異なり、3つの方法で取得することができます。

@goods = qw/pen pencil/; 
 
# Assign an array variable to a scalar variable 
$len = @goods; 
 
# Use the scalar function 
$len = scalar(@goods); 
 
# Add 1 to the index of the last element 
$len = $#goods + 1; 


7, 配列を繰り返し処理する場合、Perlはforeach関数を使用します。

@goods = qw/pen pencil brush/; 
 
# default $_ 
foreach (@goods) { 
 print "$_". "\n"; 
} 
 
# Custom variables 
foreach $item (@goods) { 
 print "$item". "\n"; 
} 


ES5ではforEachを使用することができます

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


ii. ハッシュ

1, キーと値を取得する

%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, キーと値のペアの数を取得する(Perlでは簡単)

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


JSの場合、オブジェクト全体を対象とする必要がある場合があります。

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とget-keys-and-foreachという2つの方法があります。

%person = ( 
 name => 'Jack', 
 age => 30, 
); 
 
# way 1 
while ( ($k, $v) = each %person ) { 
 print "$k: $v". "\n"; 
} 
 
# way2 
@keys = keys %person; 
foreach(@keys) { 
 print "$_: ". $person{$_}. "\n"; 
} 


JSはfor inで十分です。

4, キーが存在するかどうかを判断するために、Perlはexists関数を使用します。

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


JSはin演算子を使用します。

5、deleteキー、どちらもdeleteを使うが、Perlは関数、JSは演算子

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


III. 配列とハッシュのスワッピング

ハッシュはPerlで簡単に配列に変換できる

%person = ( 
 name => 'Jack', 
 age => 30, 
); 
@arr = %person; # convert hash to array becomes ('name', 'Jack', 'age', 30) 


配列からハッシュへ

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


以下を印刷します。

上記のスワップはJSでネイティブにサポートされていないため、独自に実装する必要があります。

以上、PerlとJSの比較分析(配列、ハッシュ)をお伝えしましたが、参考にしていただき、より多くのスクリプトホームに対応していただければと思います。