なんかいろは順でテキストソートするのが流行ってる?みたいなので

いろは順しかできないというのもあれなので 好きな順にソートできるようにします

いきなりですが完成品がこちらです
data.slice().sort((a, b) => {
    for(var i=0,l=Math.min(a.length, b.length);i<l;i++){
        var ia = order.indexOf(a[i])
        var ib = order.indexOf(b[i])
        if(ia < ib) return -1
        if(ia > ib) return 1
    }
    if(a.length < b.length) return -1
    if(a.length > b.length) return 1
    return 0
})

order には文字の順番を入れておきます
文字数が異なる aa と aab などは文字数が少ないほうが前に来るようになります



では使ってみます

まずは アルファベットで逆順 zyxwv... という並びにします
var order = "abcdefghijklmnopqrstuvwxyz".split("").reverse().join("")
order
// zyxwvutsrqponmlkjihgfedcba

var data = [
    "zz",
    "a",
    "iii",
    "aba",
    "yt",
    "aaa",
    "aba",
    "bz",
    "v",
    "cz",
    "abb",
    "zzzz",
    "gjh",
    "iii",
    "oqa",
    "byba",
]

data.slice().sort((a, b) => {
    for(var i=0,l=Math.min(a.length, b.length);i<l;i++){
        var ia = order.indexOf(a[i])
        var ib = order.indexOf(b[i])
        if(ia < ib) return -1
        if(ia > ib) return 1
    }
    if(a.length < b.length) return -1
    if(a.length > b.length) return 1
    return 0
})
// ["zz", "zzzz", "yt", "v", "oqa", "iii", "iii", "gjh", "cz", "bz", "byba", "a", "abb", "aba", "aba", "aaa"]

ちゃんと逆順ですね
"zz" は "zzzz" より短いので先にあります

そのまま書くのも長いのでメソッド化しておきます
Array.prototype.textSort = function(str_order){
return this.sort((a, b) => {
for(var i=0,l=Math.min(a.length, b.length);i<l;i++){
var ia = str_order.indexOf(a[i])
var ib = str_order.indexOf(b[i])
if(ia < ib) return -1
if(ia > ib) return 1
}
if(a.length < b.length) return -1
if(a.length > b.length) return 1
return 0
})
}

では いろは順にしてみます
といっても 「いろはにほへと」 程度しか知らないのでこの 7 文字だけ使います
;["いはへ", "ほいろに", "ろはとい", "いろ", "ほいろ", "ろい", "ほいに", "いろはに", "ろと"].textSort("いろはにほへと")
// ["いろ", "いろはに", "いはへ", "ろい", "ろはとい", "ろと", "ほいろ", "ほいろに", "ほいに"]

ちゃんと並んでます


好きな文字順にするのってけっこう簡単なんですよ