值数组。将最小值设置为0%,将最大值设置为100%,并找到所有项目的系数

时间:2018-09-22 11:56:00

标签: javascript arrays algorithm

我试图连续几个小时找到任务的解决方案,而没有真正的改进,因此,我将尝试向您寻求帮助。

比方说,我们有一个带有值的数组。

let values = [1000, 2000, 3000, 4000, 5000];
let maxValue = Math.max(...values);
let minValue = Math.min(...values);
values.map((item) => ((item) / maxValue));

如您所见,我们正在收到 [0.2,0.4,0.6,0.8,1],但是我想要的是接收数组 其中[0,0.25,0.5,0.75,1]。

这个挑战让我的逻辑有些震惊,所以希望您能为我提供帮助。 我试图将第一个值设置为0,将最后一个值设置为1,但仍然没有设置。 试图同时使用(item-minValue)/ maxValue,我们收到的第一个值为0,但这无济于事。

2 个答案:

答案 0 :(得分:0)

请查看以下代码,该代码重点在于查找可添加到输出数组[0、0.2、0.4、0.6、0.8]的值以使其成为[0、0.25、0.5、0.75、1]的代码。 而且,它将始终适用于排序的数组。

let values = [1000, 2000, 3000, 4000, 5000];
let maxValue = Math.max(...values);
let minValue = Math.min(...values);
const fractionsArr = values.map((item) => ((item-minValue) / maxValue));
const coefficient = (1 -fractionsArr[fractionsArr.length-1]) / (fractionsArr.length - 1)
return fractionsArr.map((item, index) => item + index * coefficient);

OR

let values = [1000, 2000, 3000, 4000, 5000];
let maxValue = Math.max(...values);
let minValue = Math.min(...values);
return values.map((item) => ((item-minValue) / (maxValue - minValue)));

答案 1 :(得分:0)

映射值时,您需要同时从minValueitem中减去maxValue

let values = [1000, 2000, 3000, 4000, 5000];
let maxValue = Math.max(...values);
let minValue = Math.min(...values);
values.map((item) => ((item - minValue) / (maxValue - minValue)));