可以有人比我更聪明,请解决这个简单的数学转换,我需要在javascript中完成。
如果我有一个有序的数字数组,比如...
var values = [99, 101, 102, 103, 104];
var low = 99;
var high = 104;
...and我需要将数组中的最高值作为值1推送到新数组,将次高的值作为2推送到新数组,依此类推,因此新数组是...
var newArray = [1, 2, 3, 4, 6];
我可以做一个可以工作的hack版本,但我需要一个可以在具有不同数值的数组上工作的解决方案。感谢您的帮助!
发布于 2018-06-06 01:17:41
可能是这样的
var values = [99, 101, 102, 103, 104];
var low = 99;
var high = 104;
var newOutputArr = [];
newOutputArr.push(1);
for (var j=values.length - 2; j>=0; j--) {
var cal = Math.abs(values[j] - high) + 1;
newOutputArr.push(cal);
}
console.log(newOutputArr);
希望这能有所帮助!
发布于 2018-06-06 01:21:11
您可以映射高值和值加1的增量,并反转数组。
var values = [99, 101, 102, 103, 104],
low = 99,
high = 104,
result = values
.map(v => high + 1 - v)
.reverse();
console.log(result);
发布于 2018-06-06 01:51:05
我会使用Array.prototype.reduce
。并且放弃使用low
和high
变量。然后,您可以使用任何排序数组。如下所示:
const values = [99, 101, 102, 103, 104, 108, 199, 200, 234, 235];
const newArray = values.reduce( (i, v, a, b) => {
if(a === 0) i.push(1)
else i.push(i[a - 1] + v - b[a-1])
return i
}, []);
console.log(newArray)
https://stackoverflow.com/questions/50705554
复制相似问题