JavaScript 是否有一种方法可以根据开始、停止和所需的返回值数量返回一组数字?

jam*_*mes 7 javascript arrays

我正在寻找类似于numpy.linspace 的东西,以根据起始值、结束值和数组中所需的值数量生成数字数组。

example:
start=2.0, end=3.0, num=5
result = [2.0,  2.25,  2.5 ,  2.75,  3.0]
Run Code Online (Sandbox Code Playgroud)

我遇到过this,但它根据之间的步骤分隔了范围。

JavaScript 是否有内置方法来完成此操作?

mho*_*ges 17

正如其他人提到的,JavaScript 中没有内置函数,但这是您可以自己实现的一种方法。这个具体的例子有点冗长,所以你可以确切地看到发生了什么。希望能帮助到你!

function makeArr(startValue, stopValue, cardinality) {
  var arr = [];
  var step = (stopValue - startValue) / (cardinality - 1);
  for (var i = 0; i < cardinality; i++) {
    arr.push(startValue + (step * i));
  }
  return arr;
}

console.log(makeArr(2, 3, 5));
console.log(makeArr(5, 10, 5));
console.log(makeArr(5, 10, 6));
console.log(makeArr(5, 31, 4));
Run Code Online (Sandbox Code Playgroud)

更新:如果您希望数字四舍五入到小数点后两位,您可以将该arr.push(...)行更改为以下内容:

arr.push(parseFloat((currValue + (step * i)).toFixed(2)));

或者

arr.push(Math.round((currValue + (step * i)) * 100) / 100);


STJ*_*STJ 11

您可以使用Array.from而不是手动推送到数组:

function linspace(start, stop, num, endpoint = true) {
    const div = endpoint ? (num - 1) : num;
    const step = (stop - start) / div;
    return Array.from({length: num}, (_, i) => start + step * i);
}
Run Code Online (Sandbox Code Playgroud)

请注意,这对于 num=1 和 endpoint=true 不起作用。