为了账号安全,请及时绑定邮箱和手机立即绑定

我有最小和最大数量如何生成 n 个数组

我有最小和最大数量如何生成 n 个数组

有只小跳蛙 2023-02-24 16:11:02
我有minnumber10.5和maxnumber29.75我想n从这两个范围生成数组的数量。我正在生成已经在下面的数组,interval但我该如何计算interval:generateArrayMinMax(min, max, interval) {   if (interval === 0 || interval < 0) interval = 1;   let list = [];   for (var i = min; i <= max; i = i + interval) {      list.push(i);   }   return list;}let min = 10.05;let max = 29.75;let arrayLen = 20;let result = generateArrayMinMax(10.05, 29.75, 20);预期结果:[10.5, 11.513157894736842, 12.526315789473685, 13.539473684210526, 14.552631578947368, 15.56578947368421, 16.57894736842105, 17.592105263157894, 18.605263157894736, 19.61842105263158, 20.63157894736842, 21.64473684210526, 22.657894736842103, 23.671052631578945, 24.684210526315788, 25.69736842105263, 26.710526315789473, 27.723684210526315, 28.736842105263158, 29.75]我需要计算间隔来实现,有什么方法可以做到这一点。任何帮助将不胜感激谢谢
查看完整描述

3 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

您可以使用增量和想要的部分来计算间隔。


function generateArrayMinMax(min, max, n) {

   let list = [min],

       interval = (max - min) / (n - 1);


   for (let i = 1; i < n - 1; i++) {

      list.push(min + interval * i);

   }

   list.push(max);                        // prevent floating point arithmetic errors

   return list;

}


console.log(generateArrayMinMax(10.5, 29.75, 5));


查看完整回答
反对 回复 2023-02-24
?
白衣非少年

TA贡献1155条经验 获得超0个赞

这个问题会有更多的解决方案,这里是我会怎么做:


const min = 10.05;

const max = 29.75;

const arrayLen = 20;


const generateArray = (min: number, max: number, n: number) => {

    // here you can play with some Math.round to make your interval integer or not

    const interval = (max - min) / (n - 1);

    const initial = new Array(n).fill(min);

    return initial.map((value, index) => index * interval + value);

};


const result = generateArray(min, max, arrayLen);

console.info('OUTPUT', result.join(', '));


查看完整回答
反对 回复 2023-02-24
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

i计算输出数组中position 值的公式为:


(max - min) / (interval - 1) * i + min

function generateArrayMinMax(min, max, interval) {

  const formula = (_, i) => (max - min) / (interval - 1) * i + min;

  return Array.from({ length: interval }, formula);

}


console.log(generateArrayMinMax(10.5, 29.75, 5));


如果你喜欢打代码高尔夫:


f = (a, b, l) => Array.from({ length: l }, (_, i) => (b - a) / (l - 1) * i + a);


console.log(f(10.5, 29.75, 5));


不漂亮,但仍然比当前接受的答案中的循环更好。


查看完整回答
反对 回复 2023-02-24
  • 3 回答
  • 0 关注
  • 210 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号