// 方法一 前位补0排序 var sort1 = function(){ var vs = ['1.2.0','1.12.1','0.1','2.2','2.3.4','3.1.1.1.1.1','2','11.2.1','0','100']; var zeroLen = 10; var vsSplit = vs.map(function(one){ var sp = one.split('.'); return sp.map(function(t){ var s = ''; for(var i=0;i<zeroLen - t.length;i++){ s =' '+ s; } return s + t; }).join('.'); }); return vsSplit.sort(function(a,b){ return (a>b?1:-1); }).map(function(one){ return one.replace(/ /g,''); }); } console.log(JSON.stringify(sort1())); //树+DFS var sort2 = function(){ var vs = ['1.2.0','1.12.1','0.1','2.2','2.3.4','3.1.1.1.1.1','2','11.2.1','0','100']; var m = {}; vs.map(function(one){ var p = m; one.split('.').map(function(a){ p[a] = p[a] || {}; p = p[a]; }); p.last = true; }) // console.log(JSON.stringify(m)); var l = []; var dfs = function(p,t,d){ if(p.last){ l.push(t.join('.')); } for(var k in p){ if(k!='last'){ t[d]=k; var _t = t.slice(0,d+1); // console.log(_t); dfs(p[k],_t,d+1); } } } dfs(m,[],0); return l; } console.log(JSON.stringify(sort2())); // 方法三 按列比较 var sort3 = function(){ var vs = ['1.2.0','1.12.1','0.1','2.2','2.3.4','3.1.1.1.1.1','2','11.2.1','0','100']; var vsq = vs.map(function(one){ return one.split('.'); }); return vsq.sort(function(a,b){ var l = a.length < b.length ? a.length : b.length; for(var i = 0;i<l;i++){ if(a[i]*1 != b[i] * 1){ return a[i]*1 > b[i]*1 ? 1: -1; } } return a.length > b.length ? 1 : -1; }).map(function(t){ return t.join('.'); }); } console.log(JSON.stringify(sort3()));