UNPKG

bootstrap-vue

Version:

BootstrapVue, with over 40 plugins and more than 80 custom components, custom directives, and over 300 icons, provides one of the most comprehensive implementations of Bootstrap v4 components and grid system for Vue.js. With extensive and automated WAI-AR

32 lines (31 loc) 1.23 kB
/* * Consistent and stable sort function across JavaScript platforms * * Inconsistent 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 inconsistent/unstable * * This function uses native sort with fallback to index compare when the a and b * compare returns 0 * * Algorithm based on: * https://stackoverflow.com/questions/1427608/fast-stable-sorting-algorithm-implementation-in-javascript/45422645#45422645 * * @param {array} array to sort * @param {function} sort compare function * @return {array} */ var stableSort = 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]; }); }; export default stableSort;