在PHP中,您可以。。。

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

也就是说,有一个函数可以通过传递上下限来获得一系列数字或字符。

JavaScript本机是否有内置的功能?如果没有,我将如何实施?


当前回答

我喜欢下面的路

var范围=函数(x,y){return数组(y-x+1).fill(x).map((a,b)=>{return a+b}).filter(i=>i>=x);};console.log(范围(3,10));

其他回答

如果在Visual Studio代码中遇到以下错误:

类型“IterableIterator”不是数组类型或字符串类型。使用编译器选项“--downloadIteration”允许迭代迭代器。

而不是

[...Array(3).keys()]

你可以信赖

Array.from(Array(3).keys())

有关下层迭代的更多信息

我正在分享我的实现,以防它对某人有所帮助。

function Range(start_or_num, end = null, increment = 1) {
    const end_check = end === null
    const start = end_check  ? 0 : start_or_num
    const count = end_check ? start_or_num : Math.round((end - start) / increment) + 1
     const filterFunc = end_check  ?  x => x >= start : x => x < end && x >= start

    return [...Array.from(
        Array(count).keys(), x => increment * (x - 1) + start
    )
    ].filter(filterFunc)
}
// usage
// console.log(Range(4, 10, 2)) // [4, 6, 8]
// console.log(Range(5, 10 )) //[5, 6, 7, 8, 9]
// console.log(Range(10 ))// [0, 1, 2, 3, 4, 5, 6, 7, 8]

要紧密复制的类型脚本函数

/**
 * Create a generator from 0 to stop, useful for iteration. Similar to range in Python.
 * See: https://stackoverflow.com/questions/3895478/does-javascript-have-a-method-like-range-to-generate-a-range-within-the-supp
 * See: https://docs.python.org/3/library/stdtypes.html#ranges
 * @param {number | BigNumber} stop
 * @returns {Iterable<number>}
 */
export function range(stop: number | BigNumber): Iterable<number>
/**
 * Create a generator from start to stop, useful for iteration. Similar to range in Python.
 * See: https://stackoverflow.com/questions/3895478/does-javascript-have-a-method-like-range-to-generate-a-range-within-the-supp
 * See: https://docs.python.org/3/library/stdtypes.html#ranges
 * @param {number | BigNumber} start
 * @param {number | BigNumber} stop
 * @returns {Iterable<number>}
 */
export function range(
  start: number | BigNumber,
  stop: number | BigNumber,
): Iterable<number>

/**
 * Create a generator from start to stop while skipping every step, useful for iteration. Similar to range in Python.
 * See: https://stackoverflow.com/questions/3895478/does-javascript-have-a-method-like-range-to-generate-a-range-within-the-supp
 * See: https://docs.python.org/3/library/stdtypes.html#ranges
 * @param {number | BigNumber} start
 * @param {number | BigNumber} stop
 * @param {number | BigNumber} step
 * @returns {Iterable<number>}
 */
export function range(
  start: number | BigNumber,
  stop: number | BigNumber,
  step: number | BigNumber,
): Iterable<number>
export function* range(a: unknown, b?: unknown, c?: unknown): Iterable<number> {
  const getNumber = (val: unknown): number =>
    typeof val === 'number' ? val : (val as BigNumber).toNumber()
  const getStart = () => (b === undefined ? 0 : getNumber(a))
  const getStop = () => (b === undefined ? getNumber(a) : getNumber(b))
  const getStep = () => (c === undefined ? 1 : getNumber(c))

  for (let i = getStart(); i < getStop(); i += getStep()) {
    yield i
  }
}
var range = (l,r) => new Array(r - l).fill().map((_,k) => k + l);

nope-在2002年仍然没有原生javascript范围,但这个简洁的ES6箭头函数可以像PHP一样提供升序和降序的数字和字符串(包括步骤)。

//@return数字或字符串的升序或降序范围常量范围=(a,b,d=1)=>类型a==“字符串”? range(a.charCodeAt(),b.charCodeAt()).map(v=>String.fromCharCode(v)):isNaN(b)? 范围(0,a-1):b<a? 范围(b,a,d)反向():d>1? 范围(a,b)。过滤器(v=>v%d==0):[a,b].reduce((min,max)=>阵列(max+1-min).填充(min).map((v,i)=>v+i));//用途控制台断言(range(3).toString()=='0,1,2'&&range(2,4).toString()==“2,3,4”&&range(4,2).toString()=='4,3,2'&&范围(5,15,5).toString()=='5,10,15'&&range('A','C').toString()==“A,B,C”&&range('C','A').toString()=='C,B,A');