1

我目前正在使用:

last = Math.max.apply(Math, response.data.map((o: any) => {
   return o.name; 
}))

在 response.data 数组中查找具有最高“名称”值的对象。尽管 16.12 是最大值,但它返回 16.9,因为我认为它只是查看 1 并跳过它。我怎样才能让它考虑到完整的小数?

编辑:通过的数据是:

在此处输入图像描述

4

2 回答 2

1

SemVer的上下文中,各个组件majorminorpatch是整数,但是复合值major.minor.patch本身不是有效数字。这就是为什么它们被存储为字符串的原因,句点只是一个分隔符而不是小数点。

要正确比较版本,您需要将字符串分解为其组成部分并单独比较每对数字。以下示例通过按降序排序然后取第一个值来实现此目的。

注意:由于从问题中不清楚确切的要求是什么,为了简单起见,缩写版本eg 1.1将被视为1.1.0此处 - 通常说它代表给定集合可用1.1的最高版本更为惯用。1.1.x

const cmpVersionDesc = (a, b) => {
    const as = a.split('.').map(Number)
    const bs = b.split('.').map(Number)

    return (bs[0]||0) - (as[0]||0)
        || (bs[1]||0) - (as[1]||0)
        || (bs[2]||0) - (as[2]||0)
}

const latestVersion = versions => 
    [...versions].sort(cmpVersionDesc)[0]
    
 const versions = [
    '16.9',
    '16.12',
    '16.12.1',
    '16.1'
]

console.log('latest', latestVersion(versions)) // '16.12.1'

于 2020-02-10T21:25:48.863 回答
-1

const array = [{
    name: 16.3
  },
  {
    name: 16
  },
  {
    name: 17
  },
  {
    name: 17.3
  },
  {
    name: 19
  }
]


console.log(Math.max(...array.map(({name}) => name % 1 !== 0 && name)))

于 2020-02-09T21:05:38.787 回答