JavaScript 从虚线版本数组中找到最高版本

标签 javascript arrays

我有一组版本号,如下所示:

[
  {
    "name": "v12.3.0.pre",
  },
  {
    "name": "v12.2.5",
  },
  {
    "name": "v12.2.4",
  },
  {
    "name": "v12.2.3",
  },
  {
    "name": "v12.2.1",
  },
  {
    "name": "v12.2.0",
  },
  {
    "name": "v12.2.0.pre",
  },
  {
    "name": "v12.2.0-rc32",
  },
  {
    "name": "v12.2.0-rc31",
  },
  {
    "name": "v12.1.9",
  },
  {
    "name": "v12.1.8",
  },
  {
    "name": "v12.1.6",
  },
  {
    "name": "v12.1.4",
  },
  {
    "name": "v12.1.3",
  },
  {
    "name": "v12.1.2",
  },
  {
    "name": "v12.1.1",
  },
  {
    "name": "v12.1.0",
  },
  {
    "name": "v12.1.0.pre",
  },
  {
    "name": "v12.1.0-rc23",
  },
  {
    "name": "v12.1.0-rc22",
  },
  {
    "name": "v12.0.9",
  },
  {
    "name": "v12.0.8",
  },
  {
    "name": "v12.0.6",
  },
  {
    "name": "v12.0.4",
  },
  {
    "name": "v12.0.3",
  },
  {
    "name": "v12.0.2",
  },
  {
    "name": "v12.0.1",
  },
  {
    "name": "v12.0.0",
  },
  {
    "name": "v11.12.0.pre",
  },
  {
    "name": "v11.11.8",
  }
]

我想从这个数组中确定最新版本,它不以“.pre”结尾或不包含“rc”。

我使用 for 循环遍历数组,并使用 if 语句过滤掉“.pre”和“rc”。然后我使用 split/join 删除第一个 'v' 字符。到目前为止,一切都很好。 然后我剩下像“12.2.5”和“11.12.10”这样的值。我首先想到删除点,然后使用“大于”运算符来查找最高值,但随后“11.12.10(111210)”的结果将大于“12.2.5(1225)”,这是行不通的就我而言。

for(i in arr){
    if(!arr[i].name.endsWith('.pre') && !arr[i].name.includes('rc')){
        var number = number.split('v').join("");
        var number = number.split('.').join("");
    }
}

关于解决此问题的最佳方法有什么想法吗?谢谢!

最佳答案

你可以拿String#localeCompare带有获得结果的选项。

var data = [{ name: "v12.3.0.pre" }, { name: "v12.2.5" }, { name: "v12.2.4" }, { name: "v12.2.3" }, { name: "v12.2.1" }, { name: "v12.2.0" }, { name: "v12.2.0.pre" }, { name: "v12.2.0-rc32" }, { name: "v12.2.0-rc31" }, { name: "v12.1.9" }, { name: "v12.1.8" }, { name: "v12.1.6" }, { name: "v12.1.4" }, { name: "v12.1.3" }, { name: "v12.1.2" }, { name: "v12.1.1" }, { name: "v12.1.0" }, { name: "v12.1.0.pre" }, { name: "v12.1.0-rc23" }, { name: "v12.1.0-rc22" }, { name: "v12.0.9" }, { name: "v12.0.8" }, { name: "v12.0.6" }, { name: "v12.0.4" }, { name: "v12.0.3" }, { name: "v12.0.2" }, { name: "v12.0.1" }, { name: "v12.0.0" }, { name: "v11.12.0.pre" }, { name: "v11.11.8" }],
    highest = data
        .filter(({ name }) => !name.endsWith('.pre') && !name.includes('rc'))
        .reduce((a, b) =>
            0 < a.name.localeCompare(b.name, undefined, { numeric: true, sensitivity: 'base' })
                ? a
                : b
        );

console.log(highest);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于JavaScript 从虚线版本数组中找到最高版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58027010/

相关文章:

javascript - 如何用一个函数返回多个值?

javascript - 有没有一种方法可以组合函数并将它们添加到 Javascript 中的多个数组中?

c - pipe 和 fork 导致错误和困惑的输出

javascript - 将 javascript 中的数组更改为更简单的对象

c - 为什么我获取数组元素的位置而不是其值? C

php - 如何使用 SMARTY 创建带有多维数组的 HTML 表格?

javascript - CKEditor 忽略 Laravel 中的 BASEPATH

javascript - Shiny 的 ui.R 是否支持在每个带有 tabsetPanel 的 tabPanel 上包含 html 页面?

javascript - Javascript 中多个数组中的 alert() 多个值

C++ 二维数组函数