繁体   English   中英

比较多维 arrays 并在 JavaScript 中找到最小值/最大值

[英]Compare multidimensional arrays and find min/max values in JavaScript

在我的 JavaScript 游戏中,我将分数保存在多维数组中(在本地存储中)。

我正在保存一个themeID ,一个已播放主题的标识符。 此外,我正在保存游戏设置( piecesshapesSquare )和游戏的duration

我现在需要比较分数以找到每个设置的最佳分数(= 高分)。 在这种情况下,最佳分数意味着最低的持续时间值(请随意忽略持续时间的格式,因为我知道如何比较时间戳,只需将其视为常规数字)。

对我来说,关键是只比较不同的设置,然后找到最低的持续时间值。 我不仅需要整个数组的最低持续时间,还需要为每个设置找到它。 这意味着我需要找出themeIDpiecesshapesSquare的相同之处以比较分数。 如果piecesshapesSquare不同,那么这应该是这个themeID的不同高分。

对我来说,完美的结果将是一个数组,其中我为每个主题设置了“最佳”分数。

数组看起来像:

let scores = [
  {
    "themeID": 1,
    "pieces": 10,
    "shapesSquare": true,
    "duration": "00:01:00"
  },
  {
    "themeID": 1,
    "pieces": 10,
    "shapesSquare": true,
    "duration": "00:01:30"
  },
  {
    "themeID": 4,
    "pieces": 20,
    "shapesSquare": false,
    "duration": "00:04:00"
  },
  {
    "themeID": 4,
    "pieces": 30,
    "shapesSquare": true,
    "duration": "00:03:20"
  }
]

顺便说一句,我对scores数组非常灵活,因为我自己创建了它,所以如果您对更改结构有任何建议(以便更容易迭代),请随时告诉我。

预先感谢您的任何帮助!

我会尝试类似的东西:

const minMaxDurationMap = new Map();
for (const score of scores) {
    const key = JSON.stringify([score.themeID,score.pieces,score.shapesSquare]);
    const minMax = minMaxDurationMap.get(key);
    if (minMax) {
        if (score.duration < minMax.min) minMax.min = score.duration;
        else if (score.duration > minMax.max) minMax.max = score.duration;
    } else {
        minMaxDurationMap.set(key, { min: score.duration, max: score.duration });
    }
}

顺便说一句,我认为您应该将持续时间存储为数字(秒或毫秒)而不是字符串。

我对我的解决方案的密钥生成不满意,但我想不出更好的办法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM