cheatsheets/_parcel/helpers/permutate.js

73 lines
1.2 KiB
JavaScript

/**
* Permutates a searcheable item.
*
* permutate({
* slug: 'hello-world',
* category: 'greetings'
* })
*/
export default function permutate(data) {
let words = []
if (data.slug) {
words = words.concat(permutateString(data.slug))
}
if (data.category) {
words = words.concat(permutateString(data.category))
}
return words
}
/**
* Permutates strings.
*
* @example
* permutateString('hi joe')
* => ['h', 'hi', 'j', 'jo', 'joe']
*/
export function permutateString(str) {
let words = []
let inputs = splitwords(str)
inputs.forEach((word) => {
words = words.concat(permutateWord(word))
})
return words
}
/**
* Permutates a word.
*
* @example
* permutateWord('hello')
* => ['h', 'he', 'hel', 'hell', 'hello']
*/
export function permutateWord(str) {
let words = []
const len = str.length
for (var i = 1; i <= len; ++i) {
words.push(str.substr(0, i))
}
return words
}
/**
* Helper for splitting to words.
*
* @example
* splitWords('Hello, world!')
* => ['hello', 'world']
*/
export function splitwords(str) {
const words = str
.toLowerCase()
.split(/[ /\-_]/)
.filter((k) => k && k.length !== 0)
return words
}