1. ホーム
  2. javascript

[解決済み] Pythonのrange()に似たJavaScriptの関数

2022-08-10 11:22:11

質問

JavaScriptでPythonの range() ?

毎回以下のような行を書くよりも、もっと良い方法があるはずだと思うのですが。

array = new Array();
for (i = 0; i < specified_len; i++) {
    array[i] = i;
}

どのように解決するのですか?

いいえ がない場合は、ありません。 作ることができる .

PythonのJavaScriptの実装である range()

試行錯誤の結果 Pythonでどのように動作するかをエミュレートする ということで、このような関数を作ってみます。

function range(start, stop, step) {
    if (typeof stop == 'undefined') {
        // one param defined
        stop = start;
        start = 0;
    }

    if (typeof step == 'undefined') {
        step = 1;
    }

    if ((step > 0 && start >= stop) || (step < 0 && start <= stop)) {
        return [];
    }

    var result = [];
    for (var i = start; step > 0 ? i < stop : i > stop; i += step) {
        result.push(i);
    }

    return result;
};

参照 このjsfiddle を参照してください。

の比較 range() をJavaScriptとPythonで比較

以下のように動作します。

  • range(4) リターン [0, 1, 2, 3] ,
  • range(3,6) リターン [3, 4, 5] ,
  • range(0,10,2) リターン [0, 2, 4, 6, 8] ,
  • range(10,0,-1) リターン [10, 9, 8, 7, 6, 5, 4, 3, 2, 1] ,
  • range(8,2,-2) リターン [8, 6, 4] ,
  • range(8,2) リターン [] ,
  • range(8,2,2) リターン [] ,
  • range(1,5,-1) リターン [] ,
  • range(1,5,-2) リターン [] ,

とそのPythonの対応する は全く同じように動作します は(少なくとも言及されたケースでは)全く同じように動作します。

>>> range(4)
[0, 1, 2, 3]
>>> range(3,6)
[3, 4, 5]
>>> range(0,10,2)
[0, 2, 4, 6, 8]
>>> range(10,0,-1)
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
>>> range(8,2,-2)
[8, 6, 4]
>>> range(8,2)
[]
>>> range(8,2,2)
[]
>>> range(1,5,-1)
[]
>>> range(1,5,-2)
[]

ですから、もしPythonのような関数が必要なら range() のような関数が必要な場合、上記の解決策を使うことができます。