Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Сортировка пунктов по алфавиту (https://javascript.ru/forum/misc/83886-sortirovka-punktov-po-alfavitu.html)

hdma 13.04.2022 01:47

Сортировка пунктов по алфавиту
 
Привет. Сюда в newItems по одному попадают пункты меню. Как отсортировать их все по алфавиту?

headerFilter: {
                  dataSource: function(options){
                        options.dataSource.postProcess = function (results) {
                            let x = results.reduce(function(map, entry) {
                                let newItems = entry.value.split('|');
                                //--------------------------newItems.sort()
                                return map.concat(newItems);
                            }, [])
                            .filter((e, i , arr) => arr.indexOf(e) === i && e.length)
                            .map((e, i , arr) => ({text:e, value:['e', 'contains', e]}));
 
                            return x;
                        };
                    }
                },

Подсказали следующий код, но применить затрудняюсь:
.sort(function(a, b) {
  var nameA = получить из а имя;
  var nameB = получить из b имя;
  if (nameA < nameB) {
    return -1; // сначала nameA
  }
  if (nameA > nameB) {
    return 1; // сначала nameB
  }
  return 0;  // они одинаковые
})

рони 13.04.2022 07:34

hdma,
:-?



.filter((e, i , arr) => arr.indexOf(e) === i && e.length)
.sort(function(a, b) {
  var nameA = a;
  var nameB = b;
  if (nameA < nameB) {
    return -1; // сначала nameA
  }
  if (nameA > nameB) {
    return 1; // сначала nameB
  }
  return 0;  // они одинаковые
}
).map//...

hdma 13.04.2022 11:45

Увы, не сработало.

рони 13.04.2022 12:04

hdma,
что не так?
<script>
        let results = [{
            value: 'b||||g|c'
        }, {
            value: 'm|f|c||a'
        }];
        let postProcess = function(results) {
            let x = results.reduce(function(map, entry) {
                    let newItems = entry.value.split('|');
                    return map.concat(newItems);
                }, [])
                .filter((e, i, arr) => arr.indexOf(e) === i && e.length)
                .sort(function(a, b) {
                    var nameA = a;
                    var nameB = b;
                    if (nameA < nameB) {
                        return -1; // сначала nameA
                    }
                    if (nameA > nameB) {
                        return 1; // сначала nameB
                    }
                    return 0; // они одинаковые
                })

                .map((e, i, arr) => ({
                    text: e,
                    value: ['e', 'contains', e]
                }));

            return x;
        };

        let temp = postProcess(results);

        document.write(`<pre>${JSON.stringify(temp, "", 1)}</pre>`)
    </script>

hdma 13.04.2022 15:22

рони,
возможно, это связано с особенностями виджета? Вот, прошу взглянуть — https://disk.yandex.ru/d/FwA4xd2_iCwprQ — файл "index.js", строка №230.

Проверяется из HTML-файла, по кнопке, как на скрине:

рони 13.04.2022 15:40

hdma,
могу только погадать, фильтр заголовков никак не влияет на позицию заголовков, и сортировать надо что-то другое.

рони 13.04.2022 15:51

продолжение гадания, где-то надо включить параметр allowSorting : true и возможно описать этот метод.


Часовой пояс GMT +3, время: 00:34.