在PHP中,您可以。。。

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

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

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


当前回答

Javascript提供了一个从给定值创建和填充数组的函数,接收容器数组和映射函数作为参数:

让arr=数组来源(SOURCE_Array,MAP_FUNCTION);

由于MAP_FUNCTION提供了迭代的值和索引,因此可以创建一个空数组(SOURCE_array)并使用索引填充它,如下所示(supposing 10是您所需的长度):

let arr=Array.from(数组(10),(n,索引)=>索引);

输出:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9].

其他回答

Python风格的方式:

range = (start, end, step) => {
let arr = []
for(let n=start;n<end;n+=(step||1)) arr.push(n)
return arr;
}

也可以使用生成器生成序列。不同之处在于序列中的每个值都是延迟加载的。spread运算符和for为结果工作。星号符号使函数成为生成器。

const range = function*(from,to) {   
    for(let i = from; i <= to; i++) yield I;   
};   

[...range(3,5)]// => [3, 4, 5]

如果您只想使用范围来重复一个过程n次,您可以简单地使用此代码

[...Array(10)].map((item, index) => ( 
    console.log("item:", index)
))

范围(开始、结束、步骤):使用ES6迭代器

你只要求上限和下限。在这里,我们也创建了一个带步骤的。

您可以轻松创建range()生成器函数,该函数可以用作迭代器。这意味着您不必预先生成整个阵列。

function * range ( start, end, step = 1 ) {
  let state = start;
  while ( state < end ) {
    yield state;
    state += step;
  }
  return;
};

现在,您可能需要创建一个从迭代器预生成数组并返回列表的东西。这对于接受数组的函数很有用。为此,我们可以使用Array.from()

const generate_array = (start,end,step) =>
  Array.from( range(start,end,step) );

现在您可以轻松生成静态数组,

const array1 = generate_array(1,10,2);
const array1 = generate_array(1,7);

但是,当需要迭代器(或允许您使用迭代器)时,您也可以轻松创建迭代器。

for ( const i of range(1, Number.MAX_SAFE_INTEGER, 7) ) {
  console.log(i)
}

特别注意事项

如果你使用Ramda,他们和Lodash一样有自己的R.range

您可以使用以下一行代码使事情简短明了

var启动=4;var端=20;console.log(数组(end-start+1).fill(start).map((x,y)=>x+y));