当前位置: 首页 > 面试题库 >

JavaScript是否具有类似“ range()”的方法来在提供的范围内生成范围?

江智
2023-03-14
问题内容

在PHP中,您可以…

range(1, 3); // Array(1, 2, 3)
range("A", "C"); // Array("A", "B", "C")

也就是说,有一个函数可让您通过传递上下限来获得一定范围的数字或字符。

为此,JavaScript是否内置任何内置功能?如果没有,我将如何实施?


问题答案:

它适用于字符和数字,通过可选步骤前进或后退。

var range = function(start, end, step) {
    var range = [];
    var typeofStart = typeof start;
    var typeofEnd = typeof end;

    if (step === 0) {
        throw TypeError("Step cannot be zero.");
    }

    if (typeofStart == "undefined" || typeofEnd == "undefined") {
        throw TypeError("Must pass start and end arguments.");
    } else if (typeofStart != typeofEnd) {
        throw TypeError("Start and end arguments must be of same type.");
    }

    typeof step == "undefined" && (step = 1);

    if (end < start) {
        step = -step;
    }

    if (typeofStart == "number") {

        while (step > 0 ? end >= start : end <= start) {
            range.push(start);
            start += step;
        }

    } else if (typeofStart == "string") {

        if (start.length != 1 || end.length != 1) {
            throw TypeError("Only strings with one character are supported.");
        }

        start = start.charCodeAt(0);
        end = end.charCodeAt(0);

        while (step > 0 ? end >= start : end <= start) {
            range.push(String.fromCharCode(start));
            start += step;
        }

    } else {
        throw TypeError("Only string and number types are supported");
    }

    return range;

}

jsFiddle。

如果您想扩展本机类型,则将其分配给Array.range

var range = function(start, end, step) {

    var range = [];

    var typeofStart = typeof start;

    var typeofEnd = typeof end;



    if (step === 0) {

        throw TypeError("Step cannot be zero.");

    }



    if (typeofStart == "undefined" || typeofEnd == "undefined") {

        throw TypeError("Must pass start and end arguments.");

    } else if (typeofStart != typeofEnd) {

        throw TypeError("Start and end arguments must be of same type.");

    }



    typeof step == "undefined" && (step = 1);



    if (end < start) {

        step = -step;

    }



    if (typeofStart == "number") {



        while (step > 0 ? end >= start : end <= start) {

            range.push(start);

            start += step;

        }



    } else if (typeofStart == "string") {



        if (start.length != 1 || end.length != 1) {

            throw TypeError("Only strings with one character are supported.");

        }



        start = start.charCodeAt(0);

        end = end.charCodeAt(0);



        while (step > 0 ? end >= start : end <= start) {

            range.push(String.fromCharCode(start));

            start += step;

        }



    } else {

        throw TypeError("Only string and number types are supported");

    }



    return range;



}



console.log(range("A", "Z", 1));

console.log(range("Z", "A", 1));

console.log(range("A", "Z", 3));





console.log(range(0, 25, 1));



console.log(range(0, 25, 5));

console.log(range(20, 5, 5));


 类似资料:
  • 范围表示间隔或序列。 它用于获取位于特定范围内的一组数字/字符串。 Class 声明 (Class Declaration) 以下是com.google.common.collect.Range《C》类的声明 - @GwtCompatible public final class Range<C extends Comparable> extends Object impleme

  • 此类充当窗口小部件的基类,允许用户调整下限和上限之间的数值参数的值。 缩放窗口小部件(gtk.Hscale和gtk.Vscale)和滚动条窗口小部件(gtk.HScrollbar和gtk.VScrollbar)从Range类派生功能。 这些Range小部件与Adjustment对象一起使用。 gtk.Range类的以下重要功能由Scale和Scrollbar小部件实现 - set_update_p

  • 问题内容: 我正在使用babel和webpack来玩React(@ 13.3)。 我有一个定义如下的组件: 但我收到以下错误: 未捕获的ReferenceError:未定义React 我理解错误:JSX位已编译到其中,但由于未导入而不在当前范围内。 我的问题是:解决此问题的干净方法是什么?我是否必须以某种方式在全球范围内公开使用webpack? 使用的解决方案: 我遵循@ salehen-rahm

  • 问题内容: 我有两个值: [3:6] 我试图在Golang中玩一些游戏,但是我找不到能够根据这些值创建数组的好方法。 我要实现的目标是: 问题答案: 您可以利用该构造使其更紧凑甚至更快: 出于好奇,可以在不使用循环变量的情况下实现循环,但是这样会更慢,并且代码也更长。通过递减: 或递增:

  • 主要内容:作为序列的范围,实例,实例,作为条件的范围,实例,作为间隔的范围,实例范围(Range)无处不在:a 到 z、 0 到 9、等等。Ruby 支持范围,并允许我们以不同的方式使用范围: 作为序列的范围 作为条件的范围 作为间隔的范围 作为序列的范围 范围的第一个也是最常见的用途是表达序列。序列有一个起点、一个终点和一个在序列产生连续值的方式。 Ruby 使用 ''..'' 和 ''...'' 范围运算符创建这些序列。两点形式创建一个包含指定的最高值的范围,三点形式创建

  • 根据Maven完整参考中的图像,当直接依赖关系范围为“编译”并且传递依赖关系的范围为“提供”时,传递依赖关系将被忽略。 我的问题是,如果直接依赖类从我的项目的传递依赖编译中扩展一个类将失败,因为在编译时'javac'将从传递依赖中寻找由直接依赖扩展的类,并且不会在编译时类路径中找到它,因为maven忽略了它。 基本上这就是编译直接依赖时编译传递依赖范围而不是运行时的原因,为什么提供传递依赖范围时不