結合_1(PowerShell_51)

この連載では、PowerShellについて学んでいます。前回の記事はこちらになります。

hirocom777.hatenadiary.org

前回は、集計について学びました。Measure-Objectを使うと、数値データの合計や平均、最大値、最小値などを求めることができます。

今回は結合です。PowerShellには標準で結合を行うコマンドレットがありません。では、どのようにすればいいのでしょうか。

これまでのデータ処理

PowerShellでは、CSVなどのデータをオブジェクトとして扱い、PSCustomObjectなどのオブジェクトに対してさまざまな操作を行えます。以下はSQLとPowerShellの機能を厳密に対応させたものではなく、処理内容を理解しやすくするための概念的な対応です。

コマンドレット 機能 対応SQL
Select-Object 列の選択 SELECT句
Where-Object 行の選択 WHERE句
Sort-Object 行の並べ替え ORDER BY
Measure-Object 集計 集計関数
Group-Object グループ化 GROUP BY

こうしてみると、JOIN句(テーブルの結合)に相当するコマンドレットがないことに気づきます。

JoinModule

拡張モジュールJoinModuleを使用すると、JOINに相当するコマンドレット「Join-Object」を使用できるようになります。SQLのJOIN句のように、共通のキーを使って2つのオブジェクトの集合を結合するためのモジュールです。詳細は以下を参照してください。

https://www.powershellgallery.com/packages/JoinModule/3.8.5

以下でインストールできます。

PS > Install-Module -Name JoinModule 

インストール結果は以下で確認できます。

PS > Get-InstalledModule

Version              Name
-------              ----          ・・・・
3.8.5                JoinModule

Join-Object

JoinModuleをインストールすると、コマンドレット「Join-Object」を使用できます。基本的な記述方法は以下の通りです。

Join-Object -LeftObject オブジェクト_1 -RightObject オブジェクト_2
    -On 結合に使うプロパティ -JoinType 結合方式

それではJoin-Objectの使用例を見てみましょう。以下の2つのCSVファイルを結合してみましょう。

employees.csv(社員マスター)

社員ID,氏名,部署ID
E001,田中太郎,D001
E002,佐藤花子,D002
E003,鈴木一郎,D001
E004,高橋美咲,D003
E005,伊藤健太,D002
E006,山田直子,D004
E007,小林翔太,D005

departments.csv(部署マスター)

部署ID,部署名
D001,営業部
D002,総務部
D003,経理部
D004,開発部
D005,人事部
D006,広報部

ここで、以下のスクリプトを実行してみます。

# 1. 2つのCSVファイルを読み込む
$Users = Import-Csv employees.csv
$Depts = Import-Csv departments.csv

# 2. 部署IDをキーにして、左側のデータをベースに結合させる
$Result = Join-Object -LeftObject $Users -RightObject $Depts -On 部署ID -JoinType Left

# 3. 結合した結果を表示
$Result

結果は以下のようになりました。

社員ID 氏名     部署ID 部署名
------ ----     ------ ------
E001   田中太郎 D001   営業部
E002   佐藤花子 D002   総務部
E003   鈴木一郎 D001   営業部
E004   高橋美咲 D003   経理部
E005   伊藤健太 D002   総務部
E006   山田直子 D004   開発部
E007   小林翔太 D005   人事部

2つのCSVファイルが結合された結果が得られました。今回は-JoinType Leftを指定しているため、左側の$Usersに存在する社員を基準に結合します。そのため、部署マスターに存在するD006(広報部)は結果には含まれません。

この結果をパイプライン経由で送ればデータ構成の変更、ファイル出力などの処理ができます。

Join-Objectのパラメーター

Join-Objectのパラメーターのうち、上の例で使用したものをご紹介します。

  • -LeftObject
    結合対象のオブジェクト(左側)を指定します。

  • -RightObject
    結合対象のオブジェクト(右側)を指定します。

  • -On
    結合のキーとなるプロパティを指定します。

  • -JoinType
    結合タイプを指定します。

    JoinType 結合方法 内容 SQLとの対応
    Inner 内部結合 両方に存在するキーだけ INNER JOIN
    Left 左外部結合 左側を基準に結合 LEFT JOIN
    Right 右外部結合 右側を基準に結合 RIGHT JOIN
    Full 完全外部結合 両方のデータを残す FULL OUTER JOIN
    Cross 交差結合 すべての組み合わせ CROSS JOIN
    Outer※ 対称差結合 片側にしか存在しないデータ SQLの一般的なOUTER JOINとは異なる

    ※Outerは、左右のデータのうち、結合キーが一致しないデータだけを残す結合です。排他的論理和に相当し、一般的なSQLのOUTER JOINとは異なります

次回も結合

いかがでしょうか。JoinModuleを使えば、PowerShellでもSQLのJOINに相当する結合処理を行えるようになります。次回も結合です。引き続きJoinModuleを深掘りしていこうと思います。 お楽しみに!!

PowerShell基礎の連載はコチラから

組み込みオブジェクト_3(GASの学習_13)

この連載では僕が所属しているノンプロ研で受講している、GAS中級講座での気づきをまとめています。前回の記事はこちらです。

hirocom777.hatenadiary.org

前回はArrayオブジェクトの続きと、Stringオブジェクトについて見ていきました。

今回も第4回「組み込みオブジェクト」です。Dateオブジェクト、Mathオブジェクトについて見ていきましょう。

Dateオブジェクト

Dateオブジェクトは、日付・時刻を取り扱う組み込みオブジェクトです。生成するには以下の方法があります。

new Date() //現在の日時

new Date(年, 月, 日, 時, 分, 秒, ミリ秒)
//月は0~11の整数、時以降は省略可

new Date(日付を表す文字列)

new Date(Unixエポック + 経過ミリ秒数)

ここで注意しなければならないのは、年月日を指定して生成する場合です。月を指定する数値は、実際の月より1小さい値になります。1月は0、12月は11で表されます。

UNIXエポックとは、コンピュータシステムで日時を扱う際の基準となる起点時刻で、1970年1月1日午前0時0分0秒(協定世界時: UTC)のことです。ここを起点にして、経過したミリ秒で日時を表します。

function myFunction() {

  const start = new Date('2026/06/24 19:30:15');
  const end = start;

  end.setMinutes(start.getMinutes() + 120);
  console.log(start);
  console.log(end);

}

このスクリプトを実行すると、以下のように返ってきます。

Wed Jun 24 2026 21:30:15 GMT+0900 (Japan Standard Time)
Wed Jun 24 2026 21:30:15 GMT+0900 (Japan Standard Time)

変数startと変数endは同じ値になってしまいました。変数へのオブジェクトの代入は値ではなく「参照」なので、別の変数が同じオブジェクトを指すことがあるのです。Dateオブジェクトをコピーするには、以下のように記述します。

new Date(Dateオブジェクト) 

以下のスクリプトでは、変数startと変数endが異なる値になります。

function myFunction() {

  const start = new Date('2026/06/24 19:30:15');
  const end = new Date(start);

  end.setMinutes(start.getMinutes() + 120);
  console.log(start);
  console.log(end);

}

結果は以下の通りです。

Wed Jun 24 2026 19:30:15 GMT+0900 (Japan Standard Time)
Wed Jun 24 2026 21:30:15 GMT+0900 (Japan Standard Time)

変数startと変数endが異なる値になりました。

Mathオブジェクト

Mathオブジェクトは数学関連を取り扱う組み込みオブジェクトです。Mathオブジェクトのメソッドは、Mathオブジェクトからインスタンスを生成して使うのではなく、Math.メソッド()のように直接呼び出して使用します。これを静的メソッドと言います。

Mathオブジェクトの主なメンバーは、以下になります。

メンバー 説明
PI 円周率
abs(x) xの絶対値を返す
ceil(x) x以上の最小の整数値を返す
floor(x) x以下の最大の整数値を返す
round(x) xをもっとも近い整数に丸めた値を返す
min(x, y,...) x,y,...の値の中で最小の値を返す
max(x, y,...) x,y,...の中で最大の値を返す
random() 0以上1未満の乱数を返す
sqrt(x) xの平方根を返す
trunc(x) xの整数部のみを取り出して返す

以下は使用例です。

function myFunction() {
  
  // 5 ~ 10の範囲の整数の乱数を求める
  const min = 5;
  const max = 10;
  console.log(Math.floor(Math.random() * (max - min + 1) + min));
  
  // 配列要素の最大値、最小値を求める
  const numbers = [10, 30, 20, 40];
  console.log(Math.min(...numbers));
  console.log(Math.max(...numbers));
  
}

次回はUtility Services

いかがでしょうか。Dateオブジェクト、Mathオブジェクトをうまく使うとスクリプトの幅が広がります。次回はUtility Servicesについて見ていきます。Utility Servicesには、スクリプト作成に役立つさまざまな便利な機能が用意されています。お楽しみに!!

GAS関連記事まとめ - HiroCom777の学習記録

集計(PowerShell_50)

この連載では、PowerShellについて学んでいます。前回の記事はこちらになります。

hirocom777.hatenadiary.org

前回は、グループ化について学びました。Group-Objectを使うと、データを条件ごとにグループ化して、グループごとの件数を求めることができます。

今回は集計です。コマンドレット「Measure-Object」を使用すると、数値データの合計や平均、最大値、最小値などを求めることができます。

集計

それでは実行例を見てみましょう。今回も前回と同様に、次のCSVファイル「employees.csv」があるとします。

名前,性別,部署,収入
田中,男,営業,300000
鈴木,男,開発,400000
佐藤,女,営業,350000
高橋,男,開発,450000
伊藤,女,総務,320000

以下を実行してみます。この例ではパラメーター「-Sum」を指定して、収入の合計を求めています。

PS > $a = Import-Csv employees.csv |
>>     Measure-Object 収入 -Sum

結果は以下のようになりました。

PS > $a.GetType()           

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     False    GenericMeasureInfo                       Microsoft.PowerShell.Commands.MeasureInfo

PS > $a

Count             : 5
Average           : 
Sum               : 1820000
Maximum           : 
Minimum           : 
StandardDeviation : 
Property          : 収入

収入の合計値が求められました。Countには、集計対象となったオブジェクトの数が入ります。今回のCSVには5人分のデータがあるため、Countは5になります。

その他、以下の値を求めることができます。

パラメーター 機能
-Average 平均
-Sum 合計
-Maximum 最大
-Minimum 最小
-StandardDeviation 標準偏差

これらのパラメーターは、複数指定可能です。

PS > $a = Import-Csv employees.csv |         
>>     Measure-Object 収入 -Average -Maximum -Minimum

Count             : 5
Average           : 364000
Sum               : 
Maximum           : 450000
Minimum           : 300000
StandardDeviation : 
Property          : 収入

また、パラメーター「-AllStats」を指定すると、すべての統計値を取得できます。

PS > Import-Csv employees.csv |         
>>     Measure-Object 収入 -AllStats

Count             : 5
Average           : 364000
Sum               : 1820000
Maximum           : 450000
Minimum           : 300000
StandardDeviation : 61073.7259384099
Property          : 収入

グループ化との併用

前回ご紹介したGroup-Objectと組み合わせることで、分類ごとの集計が可能です。

PS > Import-Csv employees.csv |
>>     Group-Object 部署 |      
>>     ForEach-Object {
>> 
>>         [PSCustomObject]@{
>>             Department  = $_.Name
>>             Count       = $_.Count
>>             TotalSalary = (
>>                 $_.Group |
>>                 Measure-Object 収入 -Sum  
>>             ).Sum
>>         }
>> 
>>     }

Groupプロパティには、そのグループに属するオブジェクトが格納されています。そのため、さらにMeasure-Objectを実行することで、部署単位の集計ができます。

PS > $a.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     False    PSCustomObject                           System.Object

PS > $a

Department Count TotalSalary
---------- ----- -----------
営業           2   650000.00
開発           2   850000.00
総務           1   320000.00

集計結果をPSCustomObjectにまとめておくと、その後の加工やCSV・JSON形式での出力が容易になります。

次回はWebサービス

いかがでしょうか。前回のグループ化と併せて集計を使うと強力なデータ処理ができます。次回はWebサービスです。HTTP/HTTPS要求を送信したり、データを取得したりします。お楽しみに!!

hirocom777.hatenadiary.org

PowerShell基礎の連載はコチラから

グループ化(PowerShell_49)

この連載では、PowerShellについて学んでいます。前回の記事はこちらになります。

hirocom777.hatenadiary.org

前回は、SQLite3での出力結果を変数やパイプ処理で受け取って活用してみました。SQLite3をスクリプトファイルにも適用できます。

今回はグループ化です。PowerShellにはグループ化に使用できるコマンドレットがあります。

グループ化

今回は「部署ごとの人数」のように、データを分類して件数を求める処理を扱います。

たとえば、次のようなCSVファイル「employees.csv」があるとします。

名前,性別,部署,収入
田中,男,営業,300000
鈴木,男,開発,400000
佐藤,女,営業,350000
高橋,男,開発,450000
伊藤,女,総務,320000

このデータから次のような情報を求めることができます。

  • 部署ごとの人数
  • 部署ごとの給与合計
  • 平均給与
  • 最大・最小給与

PowerShellでは、これらの処理を簡単に実現できます。

Group-Object

同じ値を持つデータをグループ化するには、コマンドレット「Group-Object」を使用します。部署ごとの人数を調べてみましょう。

PS > $a = Import-Csv employees.csv |
    Group-Object 部署

CSVファイルの内容を読み込み、各行をオブジェクトとしてGroup-Objectに渡します。結果は以下のようになりました。

PS > $a.GetType()              

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

PS > $a[0].GetType()           

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     False    GroupInfo                                System.Object

PS > $a                        

Count Name                      Group
----- ----                      -----
    2 営業                      {@{名前=田中; 性別=男; 部署=営業; 収入=300000}, @{名前=佐藤; 性別=女; 部署=営業; 収入=350000}}
    2 開発                      {@{名前=鈴木; 性別=男; 部署=開発; 収入=400000}, @{名前=高橋; 性別=男; 部署=開発; 収入=450000}}
    1 総務                      {@{名前=伊藤; 性別=女; 部署=総務; 収入=320000}}

結果はGroupInfoオブジェクトの配列として返されました。Countプロパティには各グループに含まれる件数が表示されます。Nameプロパティには部署名、Groupプロパティには、そのグループに含まれるオブジェクトが格納されています。今回の場合は、Import-Csvで作成された各行のオブジェクトです。Group-Objectのグループは、グループ名の昇順で表示されます。

件数だけ表示する

必要な項目だけ表示したい場合は、Select-Objectを利用します。

Import-Csv employees.csv |
    Group-Object 部署 |
    Select-Object Name, Count

このように記述すると、Name、Countだけ表示します。結果は以下のようになります。

Name Count
---- -----
営業     2
開発     2
総務     1

-AsHashTable

パラメーター「-AsHashTable」を指定すると、出力結果をハッシュテーブルとして出力できます。

PS > $a = Import-Csv employees.csv |
    Group-Object 部署 -AsHashTable

このように入力すると、変数の内容は以下のようになります。

PS > $a.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Hashtable                                System.Object

PS > $a

Name                           Value
----                           -----
総務                           {@{名前=伊藤; 性別=女; 部署=総務; 収入=320000}}
営業                           {@{名前=田中; 性別=男; 部署=営業; 収入=300000}, @{名前=佐藤; 性別=女; 部署=営業; 収入=350000}}
開発                           {@{名前=鈴木; 性別=男; 部署=開発; 収入=400000}, @{名前=高橋; 性別=男; 部署=開発; 収入=450000}}

ハッシュテーブルのキーを指定して、グループ内のデータにアクセスしてみます。

PS > $a['営業'] 

名前 性別 部署 収入
---- ---- ---- ----
田中 男   営業 300000
佐藤 女   営業 350000

PS > $a['営業'].GetType() 

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Collection`1                             System.Object

PS > $a['営業'][0]        

名前 性別 部署 収入
---- ---- ---- ----
田中 男   営業 300000

PS > $a['営業'][0].GetType() 

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     False    PSCustomObject                           System.Object

次回は集計

いかがでしょうか。Group-Objectを使うと、データを条件ごとにグループ化して、グループごとの件数を求めることができます。次回は集計です。数値データを集計するコマンドレット「Measure-Object」をご紹介します。お楽しみに!!

hirocom777.hatenadiary.org

PowerShell基礎の連載はコチラから

組み込みオブジェクト_2(GASの学習_12)

この連載では僕が所属しているノンプロ研で受講している、GAS中級講座での気づきをまとめています。前回の記事はこちらです。

hirocom777.hatenadiary.org

前回は組み込みオブジェクトの概要とArrayオブジェクトについて見ていきました。

今回も第4回「組み込みオブジェクト」です。引き続きArrayオブジェクトと、Stringオブジェクトについて見ていきます。

Arrayオブジェクト(続き)

スプレッド構文

スプレッド構文とは、配列の要素を展開して、別の配列や関数の引数として渡せる構文です。以下のように記述します。

...Arrayオブジェクト
  const numbers = [2, 3, 4];

と記述すると

[0, 1, ...numbers, 5] → [0, 1, 2, 3, 4, 5]
func(...numbers) → func(2, 3, 4)

と記述できます。関数定義では残余引数、関数呼び出しではスプレッド構文として使われます。また、この方法で配列をコピーできます。

function myFunction() {

  const numbers = [3, 2, 1];
  // スプレッド構文でコピーしてソート
  const sortedNumbers = [...numbers].sort();

  console.log(numbers); // [3, 2, 1] コピー元は変わらない
  console.log(sortedNumbers); // [1, 2, 3] コピー先は変わる

}

分割代入

分割代入を使うと、配列の値を個別の変数・定数に代入できます。

[a, b,...] = [値1, 値2,...]

このように記述すると、変数a , b,... には 値1, 値2,... が代入されます。

const [x, y] = [10, 20];

console.log(x); // 10
console.log(y); // 20

entriesメソッド

entriesメソッドは、配列からインデックスと値のペアを配列とした反復可能オブジェクトを生成して返します。以下のように記述します。

Arrayオブジェクト.entries()

以下は使用例です。

function myFunction() {

  const numbers = [10, 30, 20, 40];
  for (const [index, number] of numbers.entries()) {
    console.log(`${index}: ${number}`);
  }
}

出力結果は以下になります。

0:10
1:30
2:20
3:40

Stringオブジェクト

Stringオブジェクトは文字列を扱う組み込みオブジェクトです。文字列リテラルからメソッドを呼び出す場合も、一時的にラッパーオブジェクトを生成して処理します。主なメンバーは以下の通りです。

メンバー 説明
includes(str[,start]) 文字列をstart+1文字目から後方に向かって検索しstrが存在するかどうかをブール値で返す
indexOf(str[,start]) 文字列をstart+1文字目から後方に向かって検索しstrの位置を返す
padStart(len [,str]) 文字列を長さlenになるまで文字列strで埋める
replace(reg,str) 文字列を正規表現regで検索してマッチした文字列とstrを置換する
slice(start[,end]) 文字列のstart+1文字目からend文字目を抽出する
split(str) 文字列をstrで分割し配列として返す
trim() 文字列の前後の空白を削除する

簡単な使用例を見ていきましょう。

  let str = "Google Apps Script";

  console.log(str.includes("Apps")); // true
  console.log(str.includes("Python")); // false

  console.log(str.indexOf("Apps")); // 7
  console.log(str.indexOf("Python")); // -1

  console.log(str.replace("Google", "Amazon")); // Amazon Apps Script

  console.log(str.slice(7)); // Apps Script
  console.log(str.slice(-6)); // Script

  console.log(str.split(" ")); // [ 'Google', 'Apps', 'Script' ]

  str = "   Google Apps Script   ";
  console.log(str.trim()); // Google Apps Script

次回も組み込みオブジェクト

いかがでしょうか。Arrayオブジェクト、Stringオブジェクトは使用する機会が多いと思います。次回も組み込みオブジェクトです。Dateオブジェクト、Mathオブジェクトについて見ていきましょう。お楽しみに!!

hirocom777.hatenadiary.org

GAS関連記事まとめ - HiroCom777の学習記録

2026途中振り返り_2

今日は2026年6月30日です。2026年も半分が過ぎようとしています。いつものように、このタイミングで2026年の途中振り返りをしてみたいと思います。

2026の目標

2026年1月に立てた目標ですが以下になりますね。順を追って今の状態を見ていきましょう。

hirocom777.hatenadiary.org

健康

以前から虫歯になりかけと指摘されていた箇所が、治療が必要と言われてしまいました。せっかくなので、ちゃんとお金を払って治そうと思います。その他は、あまり変わりないですね。運動もちゃんとできています。

節約やめる

本を何冊か買ってみることにしました。移動時間や待ち時間に読み進めています。

でも、読む時間を確保するのが一苦労なんですよね。ゲーム機で買うかな・・・。すぐに飽きる予感もするけど。

仕事

技術書典20ではPowerShell本を販売しました。結構反響があって良かったです。

hirocom777.hatenadiary.org

出版社からのお誘いもあったので、7月から執筆始めようと思います。

AIを使いこなす

生成AI基礎講座を受講してみることにしました。やはり独学だけでは限界があるようです。他の人の使い方を見るのも参考になります。

プログラミング

GASの中級講座受講を開始しました。日常生活でGASを使うことはないのですが、複数のプログラミング言語を学ぶという事は理解が深まります。

ブログ

PowerShellについてのブログを継続しています。先にも書きましたが、商業出版のお話をいただいているので加筆する内容についても書きました。

加えて受講中のGAS中級講座の復習についても書き始めました。気が付いたのですが、受講⇒課題提出⇒ブログ執筆という流れは大変効果的だという事です。

イベント参加

『UNIXという考え方

』読書会に参加しています。この本、かなりおもしろいです。直接役に立つという事はほとんどないのですが、昔の人がどんなことを考えていたのかというのは、大変興味がありますね。

また3か月後に・・・

そんなわけで「2026途中振り返り_2」でした。また3か月後に振り返りの記事を書こうと思います。とりあえず7月から、PowerShellの商業出版頑張ります!!

組み込みオブジェクト_1(GASの学習_11)

この連載では僕が所属しているノンプロ研で受講している、GAS中級講座での気づきをまとめています。前回の記事はこちらです。

hirocom777.hatenadiary.org

前回はクラスとライブラリについて学びました。

今回は第4回「組み込みオブジェクト」です。

組み込みオブジェクトとは

組み込みオブジェクトとは、JavaScriptにあらかじめ用意されているオブジェクトのことです。以下は代表的な組み込みオブジェクトです。

組み込みオブジェクト 説明 リテラル
Number 数値 123
String 文字列 'Hello' "こんにちは"
Boolean ブール値 true false
Array 配列 [値1, 値2, …]
Function 関数 function () { //処理 }
() => { //処理 }
RegExp 正規表現 /正規表現/
Date 日付
Math 数学関連

オブジェクトの生成は、new演算子を使用して以下のように記述します。

new クラス名(引数1, 引数2,...)

クラスのconstructorメソッドを呼び出して、新たなオブジェクト(インスタンス)を生成します。NumberやStringなどのプリミティブ型では、生成されたオブジェクトをラッパーオブジェクトと呼びます。ラッパーオブジェクトとは、本来オブジェクトではないデータ型(プリミティブ型)の値をオブジェクトのように包み込み、メソッドやプロパティを利用できるようにする仕組み、またはそのオブジェクトそのものを指します。

しかしながら、リテラルが使えるものはそちらのほうがシンプルです。また、プリミティブ型のラッパーオブジェクトはオブジェクト型のデータを返すため、通常は使用しません。

console.log(typeof new Number("123"));
// objectを返す。
console.log(typeof Number("123"));
// numberを返す。

プリミティブ型のデータ自身はメソッドを持っていませんが、呼び出すことはできます。呼び出した瞬間、JavaScriptが自動的に一時的なラッパーオブジェクトを裏で作ってメソッドを実行します。

console.log("abc".toUpperCase());
// ABCを返す。

console.log((123).toFixed(2));
// 123.00を返す。

数値の例では「.」(ドット)の誤解釈を防ぐために値を()で囲っています。

Arrayオブジェクト

Arrayオブジェクトは、配列を取り扱う組み込みオブジェクトです。以下の記述で生成します。

new Array(要素数) 

配列の各要素は空の状態になります。また、要素を指定して配列を生成できます。

console.log(new Array(1, 2, 3)); // [ 1, 2, 3 ]を返す

Arrayオブジェクトのメソッドについて見ていきましょう。

変更メソッド(=破壊的メソッド)

配列自体に変更を加えるメソッドです。sortメソッドの例を見てみましょう。

function myFunction() {
    
  const numbers = [10, 30, 20, 40];
  const sortedNumbers = numbers.sort();

  console.log(numbers);        // [ 10, 20, 30, 40 ]を返す
  console.log(sortedNumbers);  // [ 10, 20, 30, 40 ]を返す

}

sortメソッドは配列の内容を並び替えます。変更メソッドなので、元の配列自体を並び替えてしまいます。

アクセサメソッド

アクセサメソッドは、配列には変更を加えずに戻り値を返すメソッドです。変更メソッドの例では元の配列自体が変更されていました。これを防ぐには、元の配列をコピーして、コピーした配列でsortメソッドを実行すればいいのです。

function myFunction() {

  const numbers = [10, 30, 20, 40];
  //sliceメソッドでコピーしてからsortメソッドで並べ替え
  const sortedNumbers = numbers.slice().sort(); 

  console.log(numbers);       // [ 10, 30, 20, 40 ]を返す
  console.log(sortedNumbers); // [ 10, 20, 30, 40 ]を返す

}

sliceメソッドは、配列の範囲を指定して要素を抜き出して配列を生成します。範囲を指定しないと元の配列をコピーして新しい配列を作成します。

反復メソッド

配列内の要素に対して処理を行うメソッドです。コールバック関数(他の関数の引数として渡され、その関数の内部で後から実行される関数)で良く使用されます。以下は使用例です。

function myFunction() {

  const numbers = [10, 30, 20, 21];
  // 配列内に3の倍数がある場合trueを返す
  const hasMultiples3 = numbers.some(value => value % 3 === 0);
  console.log(hasMultiples3);
  // 3の倍数だけを取り出した配列を返す
  const numbersMultiples3 = numbers.filter(value => value % 3 === 0);
  console.log(numbersMultiples3);
  // 各要素にインデックスを掛けた結果の配列を作る
  const numbersMultipliedIndex = numbers.map((value, index) => value * index);
  console.log(numbersMultipliedIndex);
}

someメソッドは配列内に条件が合致する要素がある場合trueを返します。filterメソッドは配列内の条件が合致する要素だけで配列を作成します。mapメソッドは配列内の各要素について指定した関数で処理した結果を配列で返します。

次回も組み込みオブジェクト

いかがでしょうか。今回は組み込みオブジェクトの概要とArrayオブジェクトについて見ていきました。次回も組み込みオブジェクトです。引き続きArrayオブジェクトとその他の組み込みオブジェクトについて見ていきましょう。お楽しみに!!

hirocom777.hatenadiary.org

GAS関連記事まとめ - HiroCom777の学習記録