JavaScriptで配列内の各値の末尾n桁を抽出する方法をわかりやすく解説
次のように、数値リテラルを含む配列があるとします。
const arr = ["", 20191219, 20191220, 20191221, 20191222, 20191223, 20191224, 20191225];
ここで求められているのは、この配列と数値 n を引数として受け取るJavaScript関数を作成することです。各要素が n 文字以上の場合は、その末尾の n 文字だけを新しい要素として返し、n 文字未満の場合は元の要素をそのまま返します。
実装のポイント
この処理を実現するためには、以下の手順が有効です。
Array.prototype.map()を使って配列の各要素を順番に処理するString()で数値を文字列に変換し、長さを判定するsubstr()(またはslice())を使って末尾の n 文字を切り出す- 切り出した結果を数値に戻せる場合は
+partで数値化し、先頭の「0」が失われるケースでは文字列のまま返す
それでは、実際のコードを見ていきましょう。
コード例
const arr = ["", 20191219, 20191220, 20191221, 20191222, 20191223,
20191224, 20191225];
const splitElement = (arr, num) => {
return arr.map(el => {
// 要素の文字数が num 以下ならそのまま返す
if(String(el).length <= num){
return el;
};
// 末尾から num 文字分を切り出す
const part = String(el).substr(String(el).length - num, num);
// 数値に変換できる場合は数値として、そうでなければ文字列として返す
return +part || part;
});
};
console.log(splitElement(arr, 2));
console.log(splitElement(arr, 1));
console.log(splitElement(arr, 4));
実行結果
コンソールへの出力は次のようになります。
[ '', 19, 20, 21, 22, 23, 24, 25 ] [ '', 9, '0', 1, 2, 3, 4, 5 ] [ '', 1219, 1220, 1221, 1222, 1223, 1224, 1225 ]
解説
注目すべきポイントは2つ目の出力結果です。n = 1 の場合、日付「20191220」の末尾は「0」ですが、単純に +part で数値化すると先頭のゼロが消えて 0 ではなく '0'(文字列)として扱われる点に注意が必要です。サンプルコードでは return +part || part; という記述により、数値化した結果が falsy(0など)になる場合は元の文字列をそのまま返すことで、この問題を回避しています。
なお、現在では非推奨とされる substr() の代わりに、String.prototype.slice(-num) を使うとより簡潔かつ安全に末尾の文字を取得できます。
-
JavaScriptで配列の要素を同じ配列内に複製する方法
JavaScriptでは、concat()メソッドとsort()メソッドを組み合わせることで、既存の配列の要素を同じ配列内に複製することができます。ここでは、実際に動作するサンプルコードを使って、その手順をわかりやすく解説します。 コード例 以下は、配列の要素を同じ配列内に複製するためのコード例です。 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name="viewport" cont
-
JavaScriptのreduce()メソッドで配列要素の積を求める方法
問題JavaScriptで、配列 arr を引数として受け取る関数を作成します。この関数は、配列内のすべての要素を掛け合わせた積を計算し、その結果を返す必要があります。解決策:reduce()メソッドを使う配列の全要素を集約して単一の値を得たい場合、Array.prototype.reduce() メソッドが最適です。reduce() は配列の各要素に対してコールバック関数を順に実行し、結果をアキュムレータ(累積値)に蓄えていきます。積を求める場合は、初期値として「1」を指定するのがポイントです。1は乗法における単位元のため、計算結果に影響を与えず、さらに空の配列が渡された場合でも正しく 1