Пользовательская сортировка JavaScript - PullRequest
0 голосов
/ 07 мая 2020
• 1000 *

Ввод:

[{
    name: '1'
}, {
    name: 'A'
}, {
    name: '#'
}, {
    name: '6'
}, {
    name: 'B'
}, {
    name: 'a'
}, {
    name: '0'
}, {
    name: '3'
}];

Выход:

[
    { name: '#' },
    { name: '0' },
    { name: '1' },
    { name: '3' },
    { name: '6' },
    { name: 'A' },
    { name: 'a' },
    { name: 'B' },
   ];

   
 
<html>
<head>
<script src="https://cdn.jsdelivr.net/lodash/4.13.1/lodash.min.js"></script>
</head>
<script>
        let input = [
                { name: '1' },
                { name: 'A' },
                { name: '#' },
                { name: '6' },
                { name: 'B' },
                { name: 'a' },
                { name: '0' },
                { name: '3' }];
                
 const customSort = (a) => _.chain(_.partition(a, i => isNaN(i.name))).flatMap(p => _.sortBy(p, 'name')).value();


</script>
         

   </html>

1 Ответ

0 голосов
/ 07 мая 2020

Попробуйте это,

x = [
    { name: '#' },
    { name: '0' },
    { name: '1' },
    { name: '3' },
    { name: '6' },
    { name: 'A' },
    { name: 'a' },
    { name: 'B' },
];

function calcSortAlg(str) {
  let num = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'],
      sym = ['@', '#', '$', '~', '`', '!', '%', '^', '&', '*', '(', ')', '_', '-', '=', '+', '|', '\\', '[', '{', '}', ']', '\'', '"', ';', ':', '<', '>', ',', '.'];
  return str.split('').map(x => sym.includes(x) ? 2 : num.includes(x) ? 1 : 0).reduce((a, v) => a + v, 0);
}

x.sort((a, b) => calcSortAlg(b.name) - calcSortAlg(a.name))

выходы,

 [
    { name: '#' },
    { name: '0' },
    { name: '1' },
    { name: '3' },
    { name: '6' },
    { name: 'A' },
    { name: 'a' },
    { name: 'B' },
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...