Как отсортировать массив по первому символу в строке? - PullRequest
2 голосов
/ 21 июня 2020

Как отсортировать этот массив?

Ввод: ['sfr2ta', '2ab', 'bbb1ddd']

Выход: ['bbb1ddd', 'sfr2ta', '2ab']

Ответы [ 3 ]

2 голосов
/ 21 июня 2020

Если вы хотите отсортировать его по первому символу , то результат должен быть таким: ['2ab', 'bbb1 ddd', 'sfr2ta'].

Но если вы хотите отсортировать, что буквы идут до нубмеров, тогда вы пишете что-то вроде:

    l = ['sfr2ta', '2ab', 'bbb1ddd'];
    
    lNums = []

    lStrs = []

    for( let s of l ) {
        if(s[0] >= 0 && s[0] <= 9){
            lNums.push(s);
        }
        else {
            lStrs.push(s);
        }
    }
    lNums.sort();
    lStrs.sort();
    l = lStrs.concat(lNums);
    console.log(l)
output: [ 'bbb1ddd', 'sfr2ta', '2ab' ]
0 голосов
/ 21 июня 2020

Мы можем сделать это с помощью sort:

var s = ['sfr2ta', '2ab', 'bbb1ddd'];

var result = [...s.filter(n=>!Number(n[0])).sort((a,b)=>a[0].localeCompare(b[0])), ...s.filter(p=>Number(p[0]))];

console.log(result);
0 голосов
/ 21 июня 2020

В зависимости от того, как вы хотите, чтобы строки нулевой длины действовали (""), это должно работать:

function sortByFirstCharacter(arr) {
    arr.sort((lhs, rhs) => {
        if(lhs === rhs) return 0;
        if(lhs === "") return -1;
        if(rhs === "") return +1;
        return (
            lhs[0] < rhs[0] ? -1
            : lhs[0] > rhs[0] ? +1
            : 0
        );
    });
    return arr;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...