プログラミング言語の中でも、高頻度で使用するのが「for文」などを代表とする「繰り返し処理」ではないでしょうか?Java Scriptの便利なライブラリである「jQuery」にも、繰り返し処理のメソッドが存在し「eachメソッド」で実装可能です。

本記事では、そんなeachメソッドの使用方法や使い分けについて、解説していきます。

eachメソッドとは

eachメソッドの使い方_eachメソッドとは
「eachメソッド」とは、オブジェクトに対して繰り返しの処理をおこなうための、jQueryメソッドです。

繰り返しを使用することで、同じ処理や応用できる処理は、1度だけ記述すればよく、何度も書く必要がなくなるため、プログラミングの記述を大幅に減らせます。

使いこなせば、非常に効率的で見やすいコードになるため、jQueryを使用する方にとっては、必須とも言える、是非とも身につけていただきたいメソッドのひとつが「eachメソッド」なわけです。

種類と使い分け

each メソッドには

  • .each() メソッド
  • jQuery.each() メソッド

の大きく2種類があり、状況によって、最適なメソッドを選択する必要があります。
それぞれの適した活用シーンは以下の通りです。

.each() メソッド

引数で指定したオブジェクトをループ処理したい時

jQuery.each() メソッド

jQuery オブジェクトをループ処理したい時

更にここから、それぞれの each メソッドの使い方について詳しく説明していきます。

.each()メソッドの使い方

eachメソッドの使い方_.each()メソッド
この章では、引数で指定したオブジェクトのループ処理に最適な「.each()メソッド」の使い方について解説します。

繰り返し処理の配列

最も利用頻度が高い、配列(Array)を繰り返し処理する方法について見ていきましょう。

var array = [‘pen1’, ‘pen2’, ‘pen3’, ‘pen4’, ‘pen5’];

$.each(array, function(index, value) {

console.log(value);

})

このプログラムのコンソール出力結果は、以下になります。

pen1
pen2
pen3
pen4
pen5

「コールバック関数」は引数が無くても成立します。値は「this」で指定できます。

例)
var array = [‘pen1’, ‘pen2’, ‘pen3’, ‘pen4’, ‘pen5’];

$.each(array, function() {

console.log(“ペンの名前:” + this);
  //↑文字列として認識できるように注意
})

Arrayに対しての最も基本的な繰り返し処理は以上のとおりです。

連想配列の繰り返し処理

連想配列にも、eachメソッドは対応できます。

例)
obj = {
name: ‘pen1’,
price: 5000,
  theme: ‘stylish’
};

$.each(obj, function(index, value) {

console.log(index + ‘→ ‘ + value);

})

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

name→ pen1
price→5000
theme→stylish

多次元配列の繰り返し処理

もちろん多次元配列にも.each()メソッドが活用できます。

例)

var pens = [
{ name: ‘pen1’, price: 5000, theme: ‘Stylish’ },
{ name: ‘pen2’, price: 7000, theme: ‘Practical’ },
{ name: ‘pen3’, price: 500, theme: ‘Simple’ },
{ name: ‘pen4’, price: 80000, theme: ‘Artistic’ },
{ name: ‘pen5’, price: 3000, theme: ‘Normal’ }
];

$.each(pens,
function(index, val) {
console.log(‘ペンの名前:’ + val.name + ‘ 価格:’ + val.price + ‘ テーマ:’ + val.theme);
}
);

出力結果は以下のとおり。

名称: pen1 値段: 5000テーマ: Stylish
名称: pen2 値段: 7000テーマ: Practical
名称: pen3 値段: 500テーマ: Simple
名称: pen4 値段: 80000テーマ: Artistic
名称: pen5 値段: 3000テーマ: Normal

jQuery.each()メソッドの使い方

eachメソッドの使い方_jQuery.each()メソッド
続いて、jQuery オブジェクトをループ処理したい場合に最適な「jQuery.each() メソッド」の使い方を例と供に解説していきます。

以下が基本的な構文となります。

jQueryオブジェクト.each(function(index) {
実行処理(繰り返し)
});)

each() メソッドの引数には呼び出し先処理から返される「コールバック関数」を使用します。

「index」を第1引数に指定して取得します。

尚、この引数も省略可能です。

$(‘li’).each(function(index) {
$(this).text(“リスト” + index);
});

この際に「this」を使用するのは「.each() メソッド」と同様です。

繰り返し処理の終了とスキップ(break・continue)

eachメソッドの使い方_繰り返し処理の終了
jQueryの「eachメソッド」には、通常多くのプログラム言語で使用される「break」や「continue」がありません。

それでは、どのようにループ処理を終了させるのか、というと
・「break」→「return false」
・「continue」→「return true」
がそれぞれ対応しています。

それぞれ具体的な使用方法を確認してみましょう。

繰り返し処理の終了

ここでは、HTML文を例に、その相場が6000円以下のペンを太字にする処理をjQueryでおこなった上で処理を終了してみましょう。

[HTML]
<h2>
ペン価格
</h2>
<p>pen6 <span>100</span>円</p>
<p>pen7 <span>400</span>円</p>
<p>pen8 <span>2000</span>円</p>
<p>pen9 <span>7000</span>円</p>
<p>pen10 <span>100000</span>円</p>

[jQuery]
$(‘p span’).each(function(){
if($(this).text() > 6000) return false;
var html = $(this).html().replace(/(d*)/g,”$1“);
$(this).html(html);
})

実行結果を確認してみましょう。

ペン価格

pen6 100円
pen7 400円
pen8 2000円

pen9 7000円
pen10 100000円

上記の例では、$(this).text()でペンの価格を取得し、if文を用いて、その値を’6000’と比較した上で、条件に合わないケース(6000を上回ったケース)の場合「return false」し、繰り返しを終了します。

「pen9」は7,000円であり、6,000円以下という予算以上の金額であるため、候補から除外された(太字ではない)というプログラムが完成しました。

上記のように、return falseはifと同時に使用することで、条件を定義し、eachメソッドの終了ができます。

繰り返し処理のスキップ

勘の良い方は気づかれたかもしれませんが、先ほど処理方法では、例えば、

<p>pen6 <span>100</span>円</p>
<p>pen8 <span>2000</span>円</p>
<p>pen9 <span>7000</span>円</p>
<p>pen10 <span>100000</span>円</p>
<p>pen7 <span>400</span>円</p>

上記のように文章が並んでいた場合、上から処理して、pen9に処理が差し掛かった時点でreturn falseしてしまい、pen7は400円と、6,000円以下であるにもかかわらず、太字にならずに終了してしまいます。

このように一定の条件下で処理をスキップしたい場合は「return true」を使用します。

そこで次は、家賃の相場が1,000円から10,000円のペンのみ太字にする処理をおこなってみましょう。

[HTML]
<h2>
ペン価格
</h2>
<p>pen6 <span>100</span>円</p>
<p>pen7 <span>400</span>円</p>
<p>pen8 <span>2000</span>円</p>
<p>pen9 <span>7000</span>円</p>
<p>pen10 <span>100000</span>円</p>

[jQuery]
$(‘p span’).each(function(){
if($(this).text() < 1000 || $(this).text() > 10000) return true;
var html = $(this).html().replace(/(d*)/g,”$1“);
$(this).html(html);
})

実行結果を見てみましょう。

ペン価格

pen6 100円
pen7 400円
pen8 2000円
pen9 7000円

pen10 100000円

if文の条件にて、価格が1000円未満、1万円以上の場合は「return true」で、処理をスキップしています。あくまで繰り返しは終了していないため、途中だけ太字にするというような処理も可能です。

まとめ

この記事では「jQuery」で使用できる2種類の「eachメソッド」ついて、それぞれ具体例を用いて解説しました。

プログラミングはただコピーするのではなく、要素の意味まで理解して使用していくことで、さまざまな応用ができる力が身につきます。

理解が難しかった点は、是非「自分で実行し、微妙にコードを変えたりしながら、処理がどのように変化するか」という「実験思考」でトライしてみてください。

必ずあなたのプログラミング力向上に役立つはずですよ!

合わせて読みたい