UNPKG

supersortjs

Version:

Cocktail sort with using compare context function

45 lines (42 loc) 1.2 kB
const sort = (arr, compare, context) => { let left = firstSwap = 0 let right = lastSwap = arr.length - 1 while (left < right) { for (let i = left; i < right; i++) { if (compare.apply(context, [arr[i], arr[i + 1]]) === -1) { [arr[i], arr[i + 1]] = [arr[i + 1], arr[i]] lastSwap = i; } } right = lastSwap; for (let i = right; i > left; i--) { if (compare.apply(context, [arr[i], arr[i - 1]]) === 1) { [arr[i], arr[i - 1]] = [arr[i - 1], arr[i]] firstSwap = i; } } left = firstSwap; } return arr; } // Tests // // const obj1 = {field : 3,} // const obj2 = {field : 1,} // const obj3 = {field : 3,} // const obj4 = {field : -13} // // const array = [obj1,obj2,obj3,obj4] // const context = { // compareObjectField: function (value1, value2) { // if (value1.field > value2.field) return -1 // if (value2.field < value1.field) return 1 // if (value2.field === value1.field) return 1 // } // } // const sorted = sort(array, function (v1,v2) { // return this.compareObjectField(v1,v2) // }, context) // // console.log(sorted); module.exports.sort = sort