Code Monkey home page Code Monkey logo

upmerge's Introduction

UpMerge

JavaScript Object Merge and Clone for Client or Server side

Installation

npm install upmerge --save

If you do not use npm you can just download build/upmerge.js file from this repository and include it in your project.

Usage

Let's assume that you have two objects

var obj1 = {
	a: 'Hi',
	b: 'World',
	c: {
		a: 'Alpha',
		b: 'Beta'
	}
};

var obj2 = {
	a: 'Hello',
	c: {
		g: 'Gamma',
		d: 'Delta'
	},
	d: 'Wow'
};

You merge them with function merge(), using set of options.

The values shown below are defaults so if you do not want to change anything - you can skip options argument, it is optional.

var options = {
	
	// Clone obj1 so it will not be changed during merge
	clone: true,
	
	// Recursive `deep` merge - `all` object levels will be merged in opposite to `first-level merge`
	deep: true,
	
	// Only replace keys/values present in first object OR `return null` if second object contains
	// key that does not exist in obj1
	replaceOnly: false
};

Now, merging:

Client side

<script type="text/javascript">
	var resultObj = upmerge.merge(obj1, obj2, options);
	console.log(resultObj);
</script>

Server side

var upmerge = require('upmerge');
var resultObj = upmerge.merge(obj1, obj2, options);
console.log(resultObj);

The result will be:

{
	a: 'Hello',
	b: 'World',
	c: {
		a: 'Alpha',
		b: 'Beta',
		g: 'Gamma',
		d: 'Delta'
	},
	d: 'Wow'
}

Cloning

You can use this library not just for merging but also for simple cloning JavaScript objects

var clonedObj = upmerge.clone(origObj);

Special features

The 'replaceOnly' mode

If you specify replaceOnly: true in an options argument - your result object will get only those values from merging object (obj2) that stored under existing in base object (obj1) keys. If someone will try to merge new keys into object - the merge() function will return null (merge fail). It is extremely useful when, for instance, you have a reference config (self-documenting, showing all the possible options) in your project and you want to let users to change described config properties only but not to add new ones (since if it is not described in reference config - it is not supported).

Testing

Clone or download the repository, go to directory tests and run bower install it will install testing framework qunit then just open tests/index.html in your browser.

Little bit more information about test cases structure you will find in cases.js.

The end

upmerge's People

Contributors

jazzfog avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.