UNPKG

bootstrap-vue

Version:

BootstrapVue provides one of the most comprehensive implementations of Bootstrap 4 components and grid system for Vue.js and with extensive and automated WAI-ARIA accessibility markup.

31 lines (30 loc) 1.2 kB
/* * Consitant and stable sort function across JavsaScript platforms * * Inconsistant sorts can cause SSR problems between client and server * such as in <b-table> if sortBy is applied to the data on server side render. * Chrome and V8 native sorts are inconsistant/unstable * * This function uses native sort with fallback to index compare when the a and b * compare returns 0 * * Algorithm bsaed on: * https://stackoverflow.com/questions/1427608/fast-stable-sorting-algorithm-implementation-in-javascript/45422645#45422645 * * @param {array} array to sort * @param {function} sortcompare function * @return {array} */ export default function stableSort(array, compareFn) { // Using `.bind(compareFn)` on the wrapped anonymous function improves // performance by avoiding the function call setup. We don't use an arrow // function here as it binds `this` to the `stableSort` context rather than // the `compareFn` context, which wouldn't give us the performance increase. return array.map(function (a, index) { return [index, a]; }).sort(function (a, b) { return this(a[1], b[1]) || a[0] - b[0]; }.bind(compareFn)).map(function (e) { return e[1]; }); }