【问题标题】:Is there a built in way to create an Array of numbers between two numbers in Javascript?是否有一种内置方法可以在 Javascript 中的两个数字之间创建一个数字数组?
【发布时间】:2020-06-03 23:45:35
【问题描述】:

给了我一个号码。我需要创建一个数组,其中包含下面的 4 个数字、数字本身和上面的 4 个数字。

我天真的方法是创建 2 个 for 循环,但我觉得使用一些 ES6 语法可以更有效地做到这一点。

例如:

generateArray(240) // [236, 237, 238, 239, 240, 241, 242, 243, 244 ];

【问题讨论】:

标签: javascript reactjs


【解决方案1】:
const generateArray = 
    (aroundNumber) => [...Array(9).keys()].map(i => i + aroundNumber - 4);

generateArray(240) // [236, 237, 238, 239, 240, 241, 242, 243, 244 ];

解释:

  1. Array(9) 正在创建一个包含 9 个元素的数组
  2. keys() 方法将返回 1,2,3,4,5,6,7,8,9
  3. map 将其转换为您需要的范围 - 它采用 i(您要转换为其他数字的数字)并向其添加偏移量(在本例中为 aroundNumber - 4,因为您的数组从数字下方的 4 个元素开始)

另外,正如 @Estradiaz 在 cmets 中提到的,您可以使用 Array.from 方法

  const generateArray = 
    (aroundNumber) => Array.from({length: 9}, (v, i) => i + aroundNumber - 4);

您可以阅读有关Array.from() 方法here 的更多信息

【讨论】:

  • 谢谢!请你能解释一下你的答案吗?
  • 很棒的解释,谢谢。我只是有点困惑 map 如何将它变成我需要的范围。
  • Array.from({length: top - bottom}, (_, i)=> i + bottom)
  • 这将是一个很好的答案......关于重复的问题。
【解决方案2】:

我会这样做

const generateArray = 
    (aroundNumber, range) => Array(range * 2 + 1).fill(0).map((_, index) => index + aroundNumber - range);

console.log(generateArray(240, 4));


// alternatively generator

function* generateArrayGenerator (value, range) {
  value = value - range;

  for(let _ of Array(range * 2 + 1)) {
    yield value++;
  }
}

console.log([...generateArrayGenerator(240, 4)])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    • 2011-12-25
    • 1970-01-01
    相关资源
    最近更新 更多