我目前正在使用:
last = Math.max.apply(Math, response.data.map((o: any) => {
return o.name;
}))
在 response.data 数组中查找具有最高“名称”值的对象。尽管 16.12 是最大值,但它返回 16.9,因为我认为它只是查看 1 并跳过它。我怎样才能让它考虑到完整的小数?
编辑:通过的数据是:
我目前正在使用:
last = Math.max.apply(Math, response.data.map((o: any) => {
return o.name;
}))
在 response.data 数组中查找具有最高“名称”值的对象。尽管 16.12 是最大值,但它返回 16.9,因为我认为它只是查看 1 并跳过它。我怎样才能让它考虑到完整的小数?
编辑:通过的数据是:
在SemVer的上下文中,各个组件major、minor和patch是整数,但是复合值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'
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)))