簡體   English   中英

我有最小和最大數量如何生成 n 個數組

[英]I have min and max number how can I generate n number of array

我有min數量10.5max數量29.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]

我需要計算間隔來實現那是否有任何方法。 任何幫助將不勝感激謝謝

您可以計算增量和所需部分的間隔。

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

這個問題會有更多的解決方案,這是我的方法:

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

計算輸出數組中位置i處的值的公式為:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM