Nano Hash - криптовалюты, майнинг, программирование

Как вернуть уникальные и отсортированные значения массива с помощью jQuery?

Возможный дубликат:
сортировка и уникальность массива Javascript

Я был удивлен, увидев, что для этого нет встроенной функции jQuery.

Я видел много решений на stackoverflow, но вопросы были загрязнены неработающими ответами (чтобы найти рабочий, мне пришлось протестировать их все).

Итак, для дальнейшего использования и для того, чтобы избавить других пользователей от хлопот, я решил опубликовать этот стиль вопросов и ответов.

Как вернуть уникальные и отсортированные значения массива с помощью jQuery?

Номера:

// input array
var inputArray = [10, 5, 15, 10, 5, 15];

// expected result array
var resultArray = [5, 10, 15];

Строки:

// input array
var inputArray = ['b', 'a', 'c', 'b', 'a', 'c'];

// expected result array
var resultArray = ['a', 'b', 'c'];

  • ууу, ты сам ответил на свой вопрос одновременно? 15.01.2013
  • @Sibu Это абсолютно законно для SO: если вы решите проблему и у вас есть решение, которое может помочь другим, вы можете сделать то, что сделал OP. Но в данном конкретном случае я не думаю, что это достаточно интересно, поскольку на него еще часто отвечают. 15.01.2013
  • @dystroy согласился, но зачем задавать вопрос, если вы знаете ответ, если вы видите время вопроса OP и время ответа, оба почти одинаковы ... забавно, не так ли? 15.01.2013
  • Причина в том, чтобы помочь другим людям: если вопрос новый и интересный, и вы думаете, что обладаете специальными знаниями, то вы можете донести его до масс. См. это. 15.01.2013

Ответы:


1

Я возьму на себя ответственность добавить сюда свой ответ вместо ранее заданного вопроса просто потому, что ответ в ранее заданном вопросе плохой, но я не надеюсь, что автор изменит решение.

Теперь, чтобы дать вам больше интуиции в решении, которое я предлагаю: сортировка — это O (n log n), удаление дубликатов — O (n), поэтому мы заключаем, что вся операция должна быть не сложнее, чем n log n. Однако, если подумать, n никогда не увеличится, а, скорее всего, уменьшится, если сначала удалить дубликаты, а затем затем отсортировать. Таким образом, хотя на поверхности это все еще O (n log n), в целом это будет быстрее. Вероятно, вы могли бы улучшить его (на других языках), собрав значения в дерево вместо хеш-таблицы, но, учитывая огромную разницу в производительности между «родными» структурами данных и пользовательскими структурами в JavaScript, решение ниже должно быть оптимальным:

function sortUnique(array) {
    "use strict";
    var table = {}, key, i;
    for (i = 0; i < array.length; i++) {
        table[[array[i]]] = '';
    }
    i = 0;
    for (key in table) {
        array[i++] = key;
    }
    array.length = i;
    return array.sort();
}
sortUnique(['b', 'a', 'c', 'b', 'a', 'c']);
// [ 'a', 'b', 'c' ]
15.01.2013
  • Вы уверены, что это быстрее? Тем более для негигантского массива? 15.01.2013
  • Я протестирую ваше решение, если оно работает и будет работать быстрее, я обязательно отмечу его как правильное, комментарии не нужны, но я не надеюсь, что автор изменит решение. 19.01.2013
  • Я отмечаю это как принятое, потому что оно работает, а также я усвоил урок о производительности. тывм wvxvw 27.01.2013
  • Если массив содержит числа или даты, этот алгоритм преобразует их в строки в IE или node.js. Причина в том (если я хорошо понимаю), что table[[...]] является нестандартной функцией, присутствующей только в проекте ECMA6, еще не реализованной в IE (на 2 года позже, чем ответ выше!). В ECMA5 ключи объектов всегда должны преобразовываться в строки. 03.03.2015

  • 2

    Как функция:

    function sort_unique(arr) {
        return arr.sort(function(a,b){
            return (a > b) ? 1 : -1;
        }).filter(function(el,i,a) {
            return (i==a.indexOf(el));
        });
    }
    
    15.01.2013
  • Я никогда не говорил, что мое решение было самым быстрым. Я разместил простое и рабочее решение. Вопрос был не в том, какой самый быстрый способ...? 19.01.2013

  • 3

    надеюсь, это сработает для вас

    var dummy = [10, 5, 15, 10, 5, 15];
    var arr = [];
    $.map(arr, function(n, i){
      if($.inArray(n, arr) == -1)
          arr.push(n);
    });
    

    теперь значения в arr уникальны. теперь вы можете применить к этому любой алгоритм сортировки.

    15.01.2013
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..