JavaScriptでrange
MDNに記載されていたコードです。
stepはデフォルト引数を1にしておいた方がより便利ですね。
使用頻度低いなら3つともデフォルト引数で即時関数なども。
Pythonのようにstopの値を含まない方が良いのでしょうかね。
stopのみ引数とstepが零の場合を配慮したコードも併記する。
// MDN const rangeMdns = (start, stop, step) => Array.from({ length: (stop - start) / step + 1 }, (_, i) => start + i * step); console.log(rangeMdns(1, 10, 2)); // Default parameters: step = 1 const range = (start, stop, step = 1) => Array.from({ length: (stop - start) / step + 1 }, (_, i) => start + i * step); console.log(range(1, 10)); console.log(range(1, 10, 2)); console.log(range(0, 10, 2)); console.log(range(10, 0, -2)); console.log(range(5, -5, -2)); console.log(range(-5, 5, 2)); // IIFE (Immediately Invoked Function Expression) console.log(((start = 1, stop = 10, step = 2) => Array.from({ length: (stop - start) / step + 1 }, (_, i) => start + i * step))()); // (positive step) => r[i] < stop. // (negative step) => r[i] > stop. const rangeofPython = (start, stop, step = 1) => Array.from({ length: (stop - Math.sign(step) - start) / step + 1 }, (_, i) => start + i * step); console.log(rangeofPython(1, 10)); console.log(rangeofPython(1, 10, 2)); console.log(rangeofPython(0, 10, 2)); console.log(rangeofPython(10, 0, -2)); console.log(rangeofPython(5, -5, -2)); console.log(rangeofPython(-5, 5, 2)); // Take care of stop only. // Take care of step zero. const rangePythonish = (...args) => { let result = []; if (args[2] === 0) throw new RangeError('step is zero'); result = !(args.length === 1) ? result : rangeofPython(0, args[0]); result = !(args.length === 2) ? result : rangeofPython(...args); result = !(args.length === 3) ? result : rangeofPython(...args); return result; }; console.log(rangePythonish()); console.log(rangePythonish(0)); console.log(rangePythonish(10)); console.log(rangePythonish(1, 10)); console.log(rangePythonish(1, 10, 2));
あとがき
ノンプログラマーの素人が記述をしたコードです。
狭い利用範囲と少ない利用頻度での確認ですので、
記載内容に間違いや勘違いがあるかもしれません。
上記内容を参照の際は自己責任でお願い致します。
Reference
連番の生成(範囲指定)
Sequence generator (range)
How to create an array containing 1...N
How to create an array containing 1...N : answer
Does JavaScript have a method like "range()" to generate a range within the supplied bounds?
Does JavaScript have a method like "range()" to generate a range within the supplied bounds? : answer