lodash-multi-set-with
v1.3.0
Published
a lodash mixin used to manipulate javascript object element elegantly
Downloads
5
Readme
lodash-multi-set-with
lodash-multi-set-with
a lodash mixin used to multi set values with context in object
assume we want mapping status
value in an object [{toreview:{status:1},reviewed:{status:2}},toreview:{status:1},reviewed:{status:2}}]
here is the code :
const arr = [{toreview:{status:1},reviewed:{status:2}},{toreview:{status:1},reviewed:{status:2}}];
const mapping = (s) => ({1:"pending",2:"done"}[s]);
arr.forEach((row)=>{
row.toreview.status = mapping(row.toreview.status);
row.reviewed.status = mapping(row.reviewed.status);
});
now we can code like this:
npm i lodash lodash-multi-set-with
const _ = require('lodash');
const multiSetWith = require('lodash-multi-set-with');
_.mixin(multiSetWith);
// now we have `multiSetWith` method
_.multiSetWith(arr,"*.toreview,reviewed.status",mapping);
API
_.multiSetWith(object, expression, mapping, [context]):object
expression
:
key.subkey
object key or array indexkey1,key2
multiple sibling keys or array indexes$
all keys
context
:
you can access parent
level
in context ,merged with context
argument
const data = { base: 10, items: [{ a: 1, b: 2, c: 5 }, { a: 4, b: 2, c: 5 }, { b: 2, c: 5 }] };
const res = _(data).multiSetWith(
"items.$.a,b",
// context.m :2 context.parent.c: sibling field
(v, context) => v * context.m * context.parent.c,
{ m: 2 }
).value();
// { base: 10, items: [{ a: 10, b: 20, c: 5 }, { a: 40, b: 20, c: 5 }, { b: 20, c: 5 }] }
Deployment
clone this repo
npm i
npm run test
run tests
depth filtering object inspired from https://gist.github.com/hafeyang/1d1295005cb58fb1ab0925216ccefe08
Built With
Authors
License
This project is licensed under the MIT License - see the LICENSE file for details
Thanks