@shaenx/js-plus

utils for javascript

Usage no npm install needed!

<script type="module">
  import shaenxJsPlus from 'https://cdn.skypack.dev/@shaenx/js-plus';
</script>

README

js-plus

Pack Examples

Basic usage

  let subObject = 'Spam'
    let o = { 'SpamA': 1, 'SpamB': 2, 'anonAbc prefixB': 0 }
    let newObject = pack({
        object: o,
        filterFn: (k) => k.startsWith(subObject),
        subobjectName: subObject
    })

Output: { 'anonAbc prefixB': 0, Spam: { SpamA: 1, SpamB: 2 } }

Using the renameKeyFn param

  let subObject = 'Spam'
    let o = { 'SpamA': 1, 'SpamB': 2, 'anonAbc prefixB': 0 }
    let newObject = pack({
        object: o,
        filterFn: (k) => k.startsWith(subObject),
        subobjectName: subObject,
        renameKeyFn: renameKeyWrapper(removePrefix, { prefix: subObject })
    })

Output: { 'anonAbc prefixB': 0, Spam: { A: 1, B: 2 } }

Example of iteration over array

import { pack } from "@shaenx/js-plus/pack"

const SUBOBJECTS = ['Pizza', 'Post', 'Book', 'Phone']
const OBJECT_ARRAY = [
    {
        "Number": "406",
        "Name": "Shaul Raggaza",
        "PizzaNumber": 10,
        "PizzaPublisher": "George Orwell",
        "PizzaUpdateDate": "2019-03-13T00:00:00.000Z",
        "PizzaVersion": 3,
        "PostNumber": null,
        "PostPublisher": null,
        "PostUpdateDate": null,
        "PostVersion": null,
        "BookNumber": null,
        "BookPublisher": null,
        "BookUpdateDate": null,
        "BookVersion": null,
        "PhoneNumber": null,
        "PhonePublisher": null,
        "PhoneUpdateDate": null,
        "PhoneVersion": null
    },
    {
        "Number": "777",
        "Name": "Jornal Dejavu",
        "PizzaNumber": null,
        "PizzaPublisher": null,
        "PizzaUpdateDate": null,
        "PizzaVersion": null,
        "PostNumber": null,
        "PostPublisher": null,
        "PostUpdateDate": null,
        "PostVersion": null,
        "BookNumber": 5555,
        "BookPublisher": "Lily Allen",
        "BookUpdateDate": "2018-02-02T00:00:00.000Z",
        "BookVersion": 2,
        "PhoneNumber": 3333,
        "PhonePublisher": "Joranj",
        "PhoneUpdateDate": "1111-01-01T00:00:00.000Z",
        "PhoneVersion": 6
    },
    {
        "Number": "777",
        "Name": "Bruce list",
        "PizzaNumber": null,
        "PizzaPublisher": null,
        "PizzaUpdateDate": null,
        "PizzaVersion": null,
        "PostNumber": null,
        "PostPublisher": null,
        "PostUpdateDate": null,
        "PostVersion": null,
        "BookNumber": null,
        "BookPublisher": null,
        "BookUpdateDate": null,
        "BookVersion": null,
        "PhoneNumber": null,
        "PhonePublisher": null,
        "PhoneUpdateDate": null,
        "PhoneVersion": null
    }
]

packPersonaPossesions = (object_array, prefixes) => {
    if (!Array.isArray(object_array)) return

    const packMultiplePrefixes = ({ object, prefixes }) => {
        let packedObject = { ...object }
        prefixes.forEach(prefix => packedObject = pack({
            object: packedObject,
            filterFn: (k) => k.startsWith(prefix),
            subobjectName: prefix,
            renameKeyFn: (k) => k.split(prefix)[1]
        }))

        return packedObject
    }

    let parsedAppendixes = []
    object_array.forEach(object => parsedAppendixes.push(packMultiplePrefixes({ object: object, prefixes })))

    return parsedAppendixes
}

let parsedObject = packPersonaPossesions(OBJECT_ARRAY, SUBOBJECTS)
console.log(parsedObject)

Output: [ { Number: '406', Name: 'Shaul Raggaza', Pizza: { Number: 10, Publisher: 'George Orwell', UpdateDate: '2019-03-13T00:00:00.000Z', Version: 3 }, Post: { Number: null, Publisher: null, UpdateDate: null, Version: null }, Book: { Number: null, Publisher: null, UpdateDate: null, Version: null }, Phone: { Number: null, Publisher: null, UpdateDate: null, Version: null } }, { Number: '777', Name: 'Jornal Dejavu', Pizza: { Number: null, Publisher: null, UpdateDate: null, Version: null }, Post: { Number: null, Publisher: null, UpdateDate: null, Version: null }, Book: { Number: 5555, Publisher: 'Lily Allen', UpdateDate: '2018-02-02T00:00:00.000Z', Version: 2 }, Phone: { Number: 3333, Publisher: 'Joranj', UpdateDate: '1111-01-01T00:00:00.000Z', Version: 6 } }, { Number: '777', Name: 'Bruce list', Pizza: { Number: null, Publisher: null, UpdateDate: null, Version: null }, Post: { Number: null, Publisher: null, UpdateDate: null, Version: null }, Book: { Number: null, Publisher: null, UpdateDate: null, Version: null }, Phone: { Number: null, Publisher: null, UpdateDate: null, Version: null } } ]