function sortVersion(list) {
let sList = list.map(item => item.split('.'))
function getRes(list) {
let sortList = list.sort((a, b) => a[0] - b[0])
let res = []
let current = {
value: undefined,
arr: [],
}
for (let i = 0; i < sortList.length; i++) {
let item = sortList[i]
let first = item[0]
if (first !== undefined && current.value !== undefined && current.value === first) {
current.arr.push(item.slice(1))
} else {
let arr = current.arr
let value = current.value
if (arr.length > 1) {
let temp = getRes(current.arr)
res = res.concat(temp.map(item => [value, ...item || []]))
} else if (arr.length === 1) {
res.push(current.item)
}
current = {
value: first,
arr: [item.slice(1)],
item: item
}
}
if (i === sortList.length - 1) {
let arr = current.arr
let value = current.value
if (arr.length > 1) {
let temp = getRes(current.arr)
res = res.concat(temp.map(item => [value, ...item || []]))
} else {
res.push(current.item)
}
}
}
return res
}
return getRes(sList).map(item => item.join('.'))
}
function testSortVersion() {
function getRandomNum() {
return Math.round(Math.random() * 10)
}
var len = getRandomNum()
len = len < 3 ? 3 : len
var versions = new Array(len).fill(0).map(item => {
let len = getRandomNum()
len = len < 3 ? 3 : len
return new Array(len).fill(0).reduce((res, item, index) => {
let random = getRandomNum()
return res += index === 0 ? random : `.${random}`
}, '')
})
console.group()
console.log('排序前:', versions)
let sortVersions = sortVersion(versions)
console.log('排序后:', sortVersions)
console.groupEnd()
}
testSortVersion()
console