Skip to content

Instantly share code, notes, and snippets.

@davidroyer
Created February 20, 2019 11:19
Show Gist options
  • Save davidroyer/2474e01123f9636926d0e7b6adf2af29 to your computer and use it in GitHub Desktop.
Save davidroyer/2474e01123f9636926d0e7b6adf2af29 to your computer and use it in GitHub Desktop.
export const uniqueArray = originalArray => [...new Set(originalArray)]
export function slugify(textToSlugify) {
return textToSlugify
.toLowerCase()
.replace(/[^\w\s-]/g, '') // remove non-word [a-z0-9_], non-whitespace, non-hyphen characters
.replace(/[\s_-]+/g, '-') // swap any length of whitespace, underscore, hyphen characters with a single -
.replace(/^-+|-+$/g, '') // remove leading, trailing -
}
export const createTagsList = (postsArray) => {
const tagsArray = []
postsArray.forEach((post) => {
if (post.tags.length) {
post.tags.forEach(tag => tagsArray.push(tag))
}
})
return uniqueArray(tagsArray)
}
export const getPostsFromTag = (posts, tag) =>
posts.filter(post => post.tags.map(tag => slugifyText(tag)).includes(tag))
export const slugifyText = str =>
slugify(str, { replacement: '-', lower: true, remove: /[$*_+~.()'"!\-:@]/g })
export const arrayToObject = (arr, keyField) =>
Object.assign({}, ...arr.map(item => ({ [item[keyField]]: item })))
export const arrayFromObject = object =>
Object.keys(object).map(key => object[key])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment