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 } } ]