协慌网

登录 贡献 社区

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

在 PHP 中,您可以...

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

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

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

答案

号码

[...Array(5).keys()];
 => [0, 1, 2, 3, 4]

角色迭代

String.fromCharCode(...[...Array('D'.charCodeAt(0) - 'A'.charCodeAt(0) + 1).keys()].map(i => i + 'A'.charCodeAt(0)));
 => "ABCD"

迭代

for (const x of Array(5).keys()) {
  console.log(x, String.fromCharCode('A'.charCodeAt(0) + x));
}
 => 0,"A" 1,"B" 2,"C" 3,"D" 4,"E"

作为功能

function range(size, startAt = 0) {
    return [...Array(size).keys()].map(i => i + startAt);
}

function characterRange(startChar, endChar) {
    return String.fromCharCode(...range(endChar.charCodeAt(0) -
            startChar.charCodeAt(0), startChar.charCodeAt(0)))
}

作为键入函数

function range(size:number, startAt:number = 0):ReadonlyArray<number> {
    return [...Array(size).keys()].map(i => i + startAt);
}

function characterRange(startChar:string, endChar:string):ReadonlyArray<string> {
    return String.fromCharCode(...range(endChar.charCodeAt(0) -
            startChar.charCodeAt(0), startChar.charCodeAt(0)))
}

lodash.js _.range()函数

_.range(10);
 => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
_.range(1, 11);
 => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
_.range(0, 30, 5);
 => [0, 5, 10, 15, 20, 25]
_.range(0, -10, -1);
 => [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
String.fromCharCode(..._.range('A'.charCodeAt(0), 'D'.charCodeAt(0) + 1));
 => "ABCD"

没有库的旧的非 es6 浏览器:

Array.apply(null, Array(5)).map(function (_, i) {return i;});
 => [0, 1, 2, 3, 4]

console.log([...Array(5).keys()]);

谢谢。

(ES6 归功于 nils petersohn 和其他评论者)

对于数字,您可以使用 ES6 Array.from()它在 IE 之外的所有时间都适用:

较短的版本:

Array.from({length: 20}, (x,i) => i);

较长版本:

Array.from(new Array(20), (x,i) => i)

这将创建一个从 0 到 19(含 0)的数组。可以将其进一步简化为以下形式之一:

Array.from(Array(20).keys())
// or
[...Array(20).keys()]

上限和下限也可以指定,例如:

Array.from(new Array(20), (x,i) => i + *lowerBound*)

一篇文章对此进行了更详细的描述: http : //www.2ality.com/2014/05/es6-array-methods.html

我最喜欢的新表格( ES2015

Array(10).fill(1).map((x, y) => x + y)

并且,如果您需要带有step参数的函数:

const range = (start, stop, step = 1) =>
  Array(Math.ceil((stop - start) / step)).fill(start).map((x, y) => x + y * step)