0
私は、チャプターシーケンスのストリングの配列を持っています。配列を昇順にソートする必要があります。どのように順序をジャバスクリプトで整理するのですか?
サンプル
var item = ["1.1", "1.1.1", "17.10", "13.11", "11.12", "17.7.a", "6.11", "6.11.1", "1.2", "1.2.1", "1.2.2.a"]
console.log("After Sort : " + item.sort());
しかし、期待される結果は
["1.1", "1.1.1", "1.2", "1.2.1", "1.2.2.a", "6.11", "6.11.1", "11.12", "13.11", "17.7.a", "17.10"]
が、私はこのから答えを得た
に更新されます
Array.prototype.humanSort = function() {
return this.sort(function(a, b) {
aa = a.split(/(\d+)/);
bb = b.split(/(\d+)/);
for(var x = 0; x < Math.max(aa.length, bb.length); x++) {
if(aa[x] != bb[x]) {
var cmp1 = (isNaN(parseInt(aa[x],10)))? aa[x] : parseInt(aa[x],10);
var cmp2 = (isNaN(parseInt(bb[x],10)))? bb[x] : parseInt(bb[x],10);
if(cmp1 == undefined || cmp2 == undefined)
return aa.length - bb.length;
else
return (cmp1 < cmp2) ? -1 : 1;
}
}
return 0;
});
}
'' 1.1.1 ''は数字ではありえない... – Rayon
@Rayon OP明らかに"文字列の配列 "と書かれていますが、なぜあなたが数字を考えているのかわかりません。 –
@NiettheDarkAbsol - 私は 'compareFunction'を期待していました。 – Rayon