この記事は下記の記事をES2015対応機能でリライトしたものです。 beatdjam.hatenablog.com
/** * range * 範囲内の整数値を持った配列を作成する * @param {number} max 範囲の最大値 * @param {number} min 範囲の最小値(デフォルト値:0) * @param {function} filer フィルタ関数(デフォルト値:全てtrue) * @return {array} 作成した配列 */ function range(max,min = 0,filter=(e)=>{return true}){ return Array(max-min+1).fill() .map((v,i)=>{return min+i}) .filter(filter); } console.log(range(5)); // 第一引数までの配列を作成する // Array [ 0, 1, 2, 3, 4, 5 ] console.log(range(5,1)); // 第二引数から第一引数までの配列を作成する // Array [ 1, 2, 3, 4, 5 ] console.log(range(5,1,e=>{return e%2 === 0})); // 第二引数から第一引数までのうち、第三引数の条件に合致する配列を作成する // Array [ 2, 4 ] console.log(range(-5,-11)); // 負の値も生成可能 // Array [ -11, -10, -9, -8, -7, -6, -5 ]
前回は(最小値、最大値、フィルタ関数)という引数の並びだったけど、
最大値までの連番を作る方が用途として多かったので、
(最大値、最小値、フィルタ関数)という並びに変更した。
処理の概要は、
Array(max-min+1)
で必要な長さの配列を生成- 配列の要素を
fill()
でundefined
にする ※空要素の場合map()
で処理がうまく走らないので必要 - 最小値+indexの値を各要素に格納
- フィルタ関数が指定されていなければ全てtrue、
指定されていればフィルタ関数でfilter()
する