JSFiddle - React, Tailwind, and code Playground

by wuct

JavaScript

const createEncode = (spec) => {
  return (value) => {
    const result = Object.keys(spec)
      .reduce((acc, key) => {
        const newKey = spec[key]
        acc[newKey] = value[key]
        return acc
      }, {})
    return result
  }
}

const createDecode = (spec) => {
  const reversedSpec = Object.keys(spec).reduce((acc, key) => {
    acc[spec[key]] = key
    return acc
  }, {})

  return (encoded) => {
    const result = Object.keys(reversedSpec)
      .reduce((acc, key) => {
        const oldKey = reversedSpec[key]
        acc[oldKey] = encoded[key]
        return acc
      }, {})
    return result
  }
}

const spec = { a: 1, b: 2 }
const encode = createEncode(spec)
const decode = createDecode(spec)

const encoded = encode({ a: 'hello', b: 'world', c: 'hi' })
console.log('encoded: ', encoded)

const decoded = decode(encoded)
console.log('decoded: ', decoded)