Skip to content

Instantly share code, notes, and snippets.

@zanona
Created November 14, 2011 12:08
Show Gist options
  • Save zanona/1363816 to your computer and use it in GitHub Desktop.
Save zanona/1363816 to your computer and use it in GitHub Desktop.
JS action for cloning object and send a filter param altogether

Clone a javascript object and iterate through keys and values with a replacer method.

var obj = {name: 'John', surname: 'Appleseed', job: {title: 'Web Developer', company: 'Apple Inc'}};
function replacer(key, value) {
    if (key === 'name') { return value.toLowerCase(); }
}

with cloneObj.js

var copy = clone(obj, replacer);

###update### For built-in scheme use JSON.stringify(obj, replacer) instead cloneObj.js

var copy = JSON.stringify(obj, replacer);
copy = JSON.parse(copy);
function clone(origin, filter) {
'use strict';
var obj, p;
function isTypeOf(obj) {
if (obj === undefined) { return undefined; }
var obType = String(obj.constructor).match(/function\s+(\w+)/);
return obType ? obType[1] : 'undefined';
//return obType ? (obType[1] === type) : false;
}
switch (isTypeOf(origin)) {
case 'Object':
obj = {};
for (p in origin) {
if (origin.hasOwnProperty(p)) {
obj[p] = clone(origin[p], filter);
if (filter) { obj[p] = clone(filter(p, obj[p]) || obj[p], filter); }
}
}
break;
case 'Array':
obj = [];
for (p = 0; p < origin.length; p += 1) {
obj[p] = clone(origin[p], filter);
}
break;
default:
obj = origin;
}
return obj;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment