首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Simple算法

Simple算法
EN

Stack Overflow用户
提问于 2018-06-06 01:12:31
回答 4查看 106关注 0票数 1

可以有人比我更聪明,请解决这个简单的数学转换,我需要在javascript中完成。

如果我有一个有序的数字数组,比如...

代码语言:javascript
复制
var values = [99, 101, 102, 103, 104];
var low = 99;
var high = 104;

...and我需要将数组中的最高值作为值1推送到新数组,将次高的值作为2推送到新数组,依此类推,因此新数组是...

代码语言:javascript
复制
var newArray = [1, 2, 3, 4, 6];

我可以做一个可以工作的hack版本,但我需要一个可以在具有不同数值的数组上工作的解决方案。感谢您的帮助!

EN

回答 4

Stack Overflow用户

发布于 2018-06-06 01:17:41

可能是这样的

代码语言:javascript
复制
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);

希望这能有所帮助!

票数 2
EN

Stack Overflow用户

发布于 2018-06-06 01:21:11

您可以映射高值和值加1的增量,并反转数组。

代码语言:javascript
复制
var values = [99, 101, 102, 103, 104],
    low = 99,
    high = 104,
    result = values
        .map(v => high + 1 - v)
        .reverse();
 
console.log(result);

票数 2
EN

Stack Overflow用户

发布于 2018-06-06 01:51:05

我会使用Array.prototype.reduce。并且放弃使用lowhigh变量。然后,您可以使用任何排序数组。如下所示:

代码语言:javascript
复制
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)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50705554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档