0

我想将此数组减少到 5 个数字,但要尽可能均匀。所以我需要开始号码,结束号码,然后是中间的号码。

const range = [8000, 9000, 10000, 11000, 12000, 13000, 14000, 15000, 16000, 17000, 18000, 19000, 20000, 21000, 22000, 23000, 24000, 25000, 26000, 27000, 28000, 29000, 30000]

基本上,上面的数组是我拥有的滑块的数据集,我想显示下面的数字,以便用户也可以看到滑块的位置,但是数字太多,无法很好地显示。

不知道如何做到这一点,这是我的尝试,但由于不均匀而导致数字间距奇怪。

const steps = range[range.length - 1] / 5;
const start = range[0];
const stop = range[range.length - 1];

let marks = Array(Math.ceil((stop - start) / steps)).fill(start).map((x, y) => x + y * steps);
marks.push(stop);
console.log(marks);
4

2 回答 2

2

由于您使用的是第一个值和最后一个值,因此实际上只需 4 个步骤即可接收 5 个值 (n-1)。让steps是一个小数值,表示每次迭代之间要跨越多少个索引,从 0 开始,在数组中的最高索引处停止。

const range = [8000, 9000, 10000, 11000, 12000, 13000, 14000, 15000, 16000, 17000, 18000, 19000, 20000, 21000, 22000, 23000, 24000, 25000, 26000, 27000, 28000, 29000, 30000]

const values = 5;
const steps = (range.length-1) / (values-1);

let marks=[];
for(let i=0; i<values; i++){
  console.log("Fractional index", i*steps); //just for display purposes
  marks.push(range[Math.round(i*steps)]);
}
console.log(marks);

于 2020-01-16T17:40:01.100 回答
1

将您的范围除以 n 步。然后逐步浏览列表并在每一步添加值。

const n=5;
const range = [8000, 9000, 10000, 11000, 12000, 13000, 14000, 15000, 16000, 17000, 18000, 19000, 20000, 21000, 22000, 23000, 24000, 25000, 26000, 27000, 28000, 29000, 30000]

const steps = Math.floor(range.length / n);
const stop = range[range.length - 1];

let marks=[]
for(let i=0;i<n-1;i++){
  marks.push(range[i*steps])
}
marks.push(stop)
console.log(marks);

于 2020-01-16T17:25:20.427 回答