在PHP中,您可以。。。

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

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

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


当前回答

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');

其他回答

您可以创建自己的es6系列版本

常量范围=(最小值,最大值)=>{const arr=数组(最大-最小+1).fill(0).map((_,i)=>i+min);返回arr;}控制台日志(范围(0,5));console.log(范围(2,8))

可以使用带有数组、for循环和Math.random()变量的函数来解决这个问题。for循环将数字推入数组,数组将包含您范围内的所有数字。然后Math.random()根据数组的长度随机选择一个。

function randNumInRange(min, max) {
  var range = []
  for(var count = min; count <= max; count++) {
    range.push(count);
  }
  var randNum = Math.floor(Math.random() * range.length);
  alert(range[randNum]);
}

Op要求范围,例如范围(3,10),因此可以

[...[...Array(10-3).keys()].map(i => i+3)]

回报

[3, 4, 5, 6, 7, 8, 9]

我会这样编码:

function range(start, end) {
    return Array(end-start).join(0).split(0).map(function(val, id) {return id+start});
}  

range(-4,2);
// [-4,-3,-2,-1,0,1]

range(3,9);
// [3,4,5,6,7,8]

它的行为类似于Python范围:

>>> range(-4,2)
[-4, -3, -2, -1, 0, 1]

解决方案:

//best performance
var range = function(start, stop, step) {
    var a = [start];
    while (start < stop) {
        start += step || 1;
        a.push(start);
    }
    return a;
};

//or
var range = function(start, end) {
    return Array(++end-start).join(0).split(0).map(function(n, i) {
        return i+start
    });
}