Modify your objects with a mongo like syntax. This is based on a modify function of Meteor's brilliant minimongo package, cleaned up, rewritten to es6, changed to work without Meteor context, and included nice, readable tests based on a mongodb documentation.
The usage is shown in the src/modify.test.js file, but to show a simple example:
import modify from 'modifyjs';
const myObject = { _id: 1, scores: [ 0, 2, 5, 5, 1, 0 ] };
const updatedObject = modify(myObject, {$pullAll: {scores: [0, 5]}});
const expectedObject = {_id: 1, scores: [2, 1]};
expect(updatedObject).toEqual(expectedObject);
npm install modifyjs
$min
✓ updates a field when the passed value is lower than an existing one (3ms)
✓ doesn't update a field when the passed value is higher than an existing one
$max
✓ updates a field when the passed value is higher than an existing one
✓ doesn't update a field when the passed value is lower than an existing one (1ms)
$inc
✓ can increment with positive and negative values at the same time
$set
✓ sets top-level fields (1ms)
✓ sets fields in embedded documents (1ms)
✓ sets elements in arrays
$unset
✓ deletes a particular field (1ms)
$push
✓ appends a value to an array
✓ appends multiple values to an array (1ms)
$pushAll
✓ appends multiple values to an array without $each
$addToSet
✓ appends array with an array
✓ adds element to an array if element doesn't already exist (1ms)
✓ doesn't add an element to the array if it does already exists
✓ adds multiple values to the array field with $each modifier, omitting existing ones
$pop
✓ removes the first element from an array (1ms)
✓ removes the last item of an array
$pullAll
✓ removes all instances of the specified values from an existing array (1ms)
$rename
✓ updates the name of a field
$currentDate
$pull (but $pullAll works)
$push with $sort modifier