【问题标题】:Math.min only picks the first of identical values in an array how can I get it to find the others?Math.min 只选择数组中第一个相同的值,我怎样才能让它找到其他值?
【发布时间】:2016-07-14 04:05:59
【问题描述】:

我第一次来这里,我知道我应该在数组方面做得更好,但由于某种原因,这个让我很难过...... 我正在创建一个 4 人游戏,每个玩家都会得到一个最低的数字,但是...... 我这样做的方式只找到数组中的第一个最低值,但它似乎忽略了相同的数字,即使它们都是最低的。
我有一个数组...

var tilesInit = new Array();
tilesInit = {
   a:9,
   b:9,
   c:11,
   d:22
}

然后我正在检查最高和最低...

//Find largerest number//
var max = Math.max.apply(null, Object.keys(scores).map(function(e) { return scores[e]; }));
//Find losing player//
var loser = scores.indexOf(max);
//Find lowest number//
var min = Math.min.apply(null, Object.keys(scores).map(function(e) { return scores[e]; }));
//Find winning player//
var winner = scores.indexOf(min);
//
//
console.log("Losing score is: "+max+"\n Losing player is player: "+loser);
console.log("Winning score is: "+min+"\n Winning player is player: "+winner);

但是我想办法重新检查它以找到另一个最低数字的索引号,我假设它在“var min”s .apply() 函数中,但我似乎无法弄清楚

p>

感谢您的帮助, 拜伦

【问题讨论】:

  • 那么你想要什么,你想检索你的对象中得分最低的所有键? (顺便说一句,用new Array() 初始化tilesInit 没有意义,因为您随后将它重新定义为一个对象。)

标签: javascript arrays math apply


【解决方案1】:

最简单的事情可能就是手工完成:

var scores = {
  a: 9,
  b: 9,
  c: 11,
  d: 22,
};

function findAllMinimum(scores) {
  var minSoFar = Infinity;
  var minScorers = [];

  Object.keys(scores).forEach(function (player) {
    var score = scores[player];
    if (score < minSoFar) {
      minSoFar = score;
      minScorers = [player];
    } else if (score === minSoFar) {
      minScorers.push(player);
    }
  });

  return minScorers;
}

console.log(findAllMinimum(scores));

// Output:
// [ 'a', 'b' ]

编辑

这是一个使用lodash 的更简洁但效率较低的选项:

function findAllMinimum(scores) {
  return _.invertBy(scores)[_.min(_.values(scores))];
}

另一种 lodash 解决方案,比上一个更有效,但仍然比上面的“手动”示例差:

function findAllMinimum(scores) {
  var minScore = _.min(_.values(scores));

  return _.filter(_.keys(scores), function (key) {
    return scores[key] === minScore;
  });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多