【问题标题】:How to create a variable that is the lowest possible number?如何创建一个尽可能小的变量?
【发布时间】:2019-02-14 20:26:09
【问题描述】:

我这里有一个算法,它找到每个子数组中的最大值并将其推送到一个单独的数组(最终)。

我想让变量 'value' 等于可能的最小数字,这样任何负数都可以被认为高于 'value'

function largestOfFour(arr) {
  var final=[];
  arr.map(sub => {
    let value = 0; //issue
    sub.map(num => {
      if(num>value){value=num};
    })
    final.push(value)
  })
  return final;
}
console.log(largestOfFour([[17, 23, 25, 12], [25, 7, 34, 48], [4, -10, 18, 21], [-72, -3, -17, -10]]));

在本例中,最后一个子数组返回 0,因为该子数组中没有一个数字高于 'value' 的初始值,即 0。

我希望它返回“-3”,因为它是子数组中的最高数字。

【问题讨论】:

  • let value = Number.NEGATIVE_INFINITY;
  • 您问错了问题,您要寻找的是如何找到最多四个数字。假设数组的第一个元素是最高的,然后针对它测试其他元素。
  • 以后,请注意@ChrisG 在他的评论中提到的可怕的XY Problem。虽然提供您已采取的步骤很重要,但通常最好询问最终目标本身,而不是建议的解决方案。

标签: javascript arrays algorithm


【解决方案1】:

您可以将value 设置为Number.NEGATIVE_INFINITY,但无论如何,我建议您在内部函数中简单地使用reduce 而不是map。这样,内部循环将以sub[0] 作为初始值开始,而不是依赖于任何占位符。

function largestOfFour(arr) {
  var final = arr.map(sub => sub.reduce((num, value) => Math.max(num, value)));
  return final;
}
console.log(largestOfFour([
  [17, 23, 25, 12],
  [25, 7, 34, 48],
  [4, -10, 18, 21],
  [-72, -3, -17, -10]
]));

【讨论】:

  • 使用 sub[0] 只是因为它比 Number.NEGATIVE_INFINITY 短,感谢您的提示
【解决方案2】:

看起来你只是在寻找每个数组的最大值。

使用Array#mapMath#maxspread syntax 你可以做这样的事情。

const data = [[17, 23, 25, 12], [25, 7, 34, 48], [4, -10, 18, 21], [-72, -3, -17, -10]];

const res = data.map(arr=>Math.max(...arr));

console.log(res);

【讨论】:

  • 好收获。比我的还简单。
猜你喜欢
  • 2014-01-04
  • 2020-12-05
  • 2017-07-03
  • 2022-11-23
相关资源
最近更新 更多