【问题标题】:Is there a way to create an Integer range in JavaScript? [duplicate]有没有办法在 JavaScript 中创建整数范围? [复制]
【发布时间】:2018-10-17 08:28:06
【问题描述】:

有没有办法创建一个整数范围?

在其他语言中,我可以使用Range(1, 9) 轻松创建[1, 2, ... 8]

有没有一种在 JavaScript 中创建列表的简单方法?

【问题讨论】:

标签: javascript


【解决方案1】:

有没有在 JavaScript 中创建列表的简单方法?

不可以,但您可以使用ES 功能(如mapspread syntax)创建自己的解决方案。

var range = (start, end) => start < end ? [...Array(end - start)].map((_, i) => start + i) : [];
console.log(range(1,9));

另外,returns 一个 empty 数组用于start 大于end 的情况。

【讨论】:

  • 如果输入(1,9),OP需要1-8
  • @AnkitAgarwal,已更新。
  • 这会给Range(9,1) 报错。这个案子也不处理
  • @AnkitAgarwal,对于start &gt; end,我只返回一个空数组。
  • 是的,现在看起来不错
【解决方案2】:
 const range = (start, end) => Array.from({length: end - start}, (_, i) => start + i);

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

这将创建一个带有索引的数组。如果您在循环中需要它,迭代器可能会更好:

 function* range(start, end = Infinity) {
   for(let i = start; i < end; i++)
     yield i;
 }

可以用作:

 for(const v of range(1, 10))
    console.log(v);

您还可以轻松地将迭代器转换为数组:

 console.log([...range(0, 10)]);

【讨论】:

  • 这会给 Range(9,1) 带来错误。这个案子也不处理
【解决方案3】:

您可以创建一个名为Range 的可重用函数并循环遍历开始值和结束值。您可以进一步添加if 条件,确保起始值始终小于结束值。

function Range(start, end){
  var rangeArray = [];
  if(start < end){
    for(var i=start; i<end; i++){
      rangeArray.push(i);
    }
  }
  return rangeArray;
};

console.log(Range(1,9));
console.log(Range(2,9));
console.log(Range(5,12));
console.log(Range(16,12));
console.log(Range(30,12));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2017-08-22
    • 1970-01-01
    相关资源
    最近更新 更多