ЙажаСценарий / Говнокод #25757 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
function sortWithIndeces(toSort: any) {
  for (let i = 0; i < toSort.length; i++) {
    toSort[i] = [toSort[i], i];
  }
  toSort.sort(function(left: any[], right: any[]) {
    return left[0] < right[0] ? -1 : 1;
  });
  toSort.sortIndices = [];
  for (let j = 0; j < toSort.length; j++) {
    toSort.sortIndices.push(toSort[j][1]);
    toSort[j] = toSort[j][0];
  }

  return toSort;
}

sortWithIndeces(arr);

arr.sortIndices.forEach((item: any, index: number) => {
  result[index] = data[item];
});

Нашёл в гите у нас на проекте этот божественный код )
Сортировка выглядит так, ни одного коммента в коде.
В ходе анализа стало понятно что таким образом автор пытался восстановить порядок сортировки.

Запостил: igpo igpo, (Updated )

Комментарии (24) RSS

  • Не знал, что в «JavaScript» можно указывать типы
    Ответить
    • Можно было в «ES4». Его даже реализовали в какой-то древней версии Mozilla Suite, но потом убрали.
      Ответить
        • Синтаксис одинаковый, вот только AS2 появился в 2003 году (как выглядел AS1, я сходу не нагуглю), а черновик ES4 опубликовали в 2007.
          Ответить
  • И кстати, использовать any - очень плохая практика.
    Ответить
    • Ну здесь же общий алгоритм, который работает для любых типов с оператором "меньше"... Или в тайпскрипте для них есть какой-нибудь Comparable?
      Ответить
      • если просто, то ts - это типизация для js
        ts не добавляет никаких новых функций
        `left[0] < right[0]` работает потому что ts считает что там тип any, то есть эти значения могут быть числами
        сложно рефакторить код, где используются any
        Ответить
        • И не могу сделать одну функцию, которая сможет сортировать массивы строк и массивы чисел? Придётся либо копипастить sortNumbers и sortStrings либо юзать any?
          Ответить
            • да, есть там дженерики, но нельзя перегрузить функцию
              придётся в одной функции учесть входные значения всех поддерживаемых типов
              Ответить
              • ну правильно, они же только в момент компиляции есть, а функция-то одна и та же, и на диспатч генерик не влияет

                Тоже самое и в Java.
                Проблемы нет только в шаблонах С++ (у или точнее наоборот -- там есть проблемы с пониманием того, что вызовется)
                Ответить
      • и left[0][0][0][0][0][0][0][0][0][0][0][0][0] тоже отработает, но упадёт в runtime
        Ответить
        • [0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0]
          Кто проживает на дне океана?
          Ответить
    • ну собссно any это отказ от типизации
      зачем тада тайпскрипт?
      Ответить
  • toSortWithIndices =: /:~ ; /:
       toSortWithIndices 34 2 12 54 85 41 3 54 12
    ┌────────────────────────┬─────────────────┐
    │2 3 12 12 34 41 54 54 85│1 6 2 8 0 5 3 7 4│
    └────────────────────────┴─────────────────┘
    Ответить

Добавить комментарий

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8