This is a userscript (for Greasemonkey, Tampermonkey, etc.) for sorting answers to posts randomly, like so:

[![partial screenshot][1]][1]

This feature was [requested](https://meta.stackoverflow.com/questions/310356/fall-2015-moderator-election-qa-questionnaire?answertab=oldest#comment272841_310356) in connection with the [Stack Overflow Fall 2015 Moderator Election Q&A - Questionnaire](https://meta.stackoverflow.com/questions/310356/fall-2015-moderator-election-qa-questionnaire).

To install the script, just [**click here**](https://gist.github.com/edcottrell/a2a03b6cd3dabe682142/raw/3873f335cb178702af1a18948bf540cd218cad89/randomSortSOAnswers.user.js). You can also [view the source (a github gist)](https://gist.github.com/edcottrell/a2a03b6cd3dabe682142) and install by clicking the "Raw" button.

# Source:

    // ==UserScript==
    // @name         Stack Overflow Random Answer Sort Tab
    // @namespace    https://github.com/edcottrell/
    // @version      0.1.2
    // @description  Add a "random" tab for sorting Stack Overflow answers
    // @author       Ed Cottrell
    // @license      MIT
    // @match       *://*.askubuntu.com/*
    // @match       *://*.mathoverflow.net/*
    // @match       *://*.serverfault.com/*
    // @match       *://*.stackapps.com/*
    // @match       *://*.stackexchange.com/*
    // @match       *://*.stackoverflow.com/*
    // @match       *://*.superuser.com/*
    // @exclude     *://data.stackexchange.com/*
    // @exclude     *://stackexchange.com/users/*
    // @grant        none
    // ==/UserScript==
    
    // set up some variables
    var $answers = jQuery('div.answer'),
        arrayIndex,
        newOrder = [],
        prop,
        randomWeights = {},
        relativeUrl = window.location.href.replace(/^.+\/\/.+?\//, '\/'),
        selectedTab = window.location.href.replace(/.+?answertab=([^&#]+).*/, '$1'),
        tabUrl = relativeUrl.replace(/([?&]answertab=)[^&#]+/, '$1random')
        ;
    
    // make sure the URL has an answertab parameter
    if (!tabUrl.match(/([?&]answertab=)[^&#]+/)) {
        tabUrl = (tabUrl + '?answertab=random').replace(/(\?.+)\?/, '$1&');
    }
    
    
    // add a random sort tab
    jQuery('#tabs a[data-value="oldest"]').after('<a href="' + tabUrl + '" title="Random" data-value="random" data-nav-xhref="">random</a>');
    
    if (selectedTab === 'random') {
        // fix the tab highlighting
        jQuery('.youarehere').removeClass('youarehere');
        jQuery('a[title="Random"]').addClass('youarehere');
    
        // give each answer a random "weight" for sorting
        $answers.each(function (x) {
            randomWeights[$(this).prop('id').replace(/answer-/, '')] = Math.random();
        });
    
        // sort the ids by weight
        for (prop in randomWeights) {
            newOrder.push(prop);
        }
        newOrder.sort(
            function(a,b) {
                return randomWeights[a] > randomWeights[b] ? 1 : (randomWeights[a] == randomWeights[b] ? 0 : -1); 
            }
        );
    
        // remove the anchor tags and answers and append them in the right order
        for (arrayIndex = 0; arrayIndex < newOrder.length; arrayIndex++) {
            $('a[name=' + newOrder[arrayIndex] + ']')
                .detach()
                .appendTo('div#answers');
            $('div#answer-' + newOrder[arrayIndex])
                .detach()
                .appendTo('div#answers');
        }
    
        // reset locations of the non-answer elements of the #answers div
        $('#answers a[name="new-answer"]')
            .detach()
            .appendTo('div#answers');
        $('#post-form')
            .detach()
            .appendTo('div#answers');
        $('#show-editor-button')
            .detach()
            .appendTo('div#answers');
        $('#answers .bottom-notice')
            .detach()
            .appendTo('div#answers');
    }

**Caution:** This is poorly (barely) tested and may melt your browser or make kittens cry. More likely, it will just slightly slow down SE-network sites, but I make no promises.

Any feedback would be appreciated!


  [1]: https://i.sstatic.net/NrB8s.png