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.

29 lines (27 loc) 1.16 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((a, index) => [ index, a ]) .sort(function (a, b) { return this(a[1], b[1]) || a[0] - b[0] }.bind(compareFn)) .map(e => e[1]) }