UNPKG

refsort

Version:

Lets you sort by key values for JSON

65 lines (52 loc) 2.08 kB
module.exports = Array.prototype.refSort = function (key, value) { const characterCounter = (string, char) => { return string.split(char).length - 1 } const prioritization = (key, val) => { let valUpper = val.toUpperCase() let valArray = valUpper.split('') let keyUpper = key.toUpperCase() let score = 0 valArray.forEach(char => (score = score + characterCounter(keyUpper, char))) return score } const convertString = phrase => { const maxLength = 100 let returnString = phrase.toLowerCase() returnString = returnString.replace(/ö/g, 'o') returnString = returnString.replace(/ç/g, 'c') returnString = returnString.replace(/ş/g, 's') returnString = returnString.replace(/ı/g, 'i') returnString = returnString.replace(/ğ/g, 'g') returnString = returnString.replace(/ü/g, 'u') returnString = returnString.replace(/[^a-z0-9s-]/g, '') returnString = returnString.replace(/[s-]+/g, ' ') returnString = returnString.replace(/^s+|s+$/g, '') if (returnString.length > maxLength) returnString = returnString.substring(0, maxLength) returnString = returnString.replace(/s/g, '-') return returnString } let newObj = [] this.forEach(val => { let _key = convertString(val[key]).toUpperCase() let _val = convertString(value).toUpperCase() val.score = prioritization(_key, _val) let indexOf = _key.indexOf(_val) val._priority = ((val.score + indexOf) * val.score) / 100 val._index = indexOf === -1 ? NaN : indexOf val._include = _key.includes(_val) delete val.score newObj.push(val) }) newObj = newObj .sort((a, b) => b._priority - a._priority) .sort((a, b) => b._include - a._include) .sort((a, b) => a._index - b._index) newObj.forEach(char => { delete char._priority delete char._include delete char._index }) return newObj }