set methods for underscore
_.override(a, b[, c...]) overrides an existing properties of object a with ones from object b _.minus(a, b[, c...]) deletes properties of object a which defined in object b _.intersect(a, b[, c...]) creates new object with properties from object a which also exists in object b
by dkunin
JavaScript
var slice = Array.prototype.slice;
_.override = function(obj) {
_.each(slice.call(arguments, 1), function(source) {
if (source) {
for (var prop in source) {
if (obj[prop] !== void 0) obj[prop] = source[prop];
}
}
});
return obj;
};
_.minus = function(obj) {
_.each(slice.call(arguments, 1), function(source) {
if (source) {
for (var prop in source) {
if (obj[prop] !== void 0) delete obj[prop];
}
}
});
return obj;
};
_.intersect = function(obj) {
var res = {};
_.each(slice.call(arguments, 1), function(source) {
if (source) {
for (var prop in source) {
if (obj[prop] !== void 0) res[prop] = obj[prop];
}
}
});
return res;
}
(function() {
var g = 'g', r = 'r', rr = {b1: r, b2: r, b3: r, c1: r, c2: r, c3: r},
gg = {a0: g, a1: g, b0: g, b1: g, c0: g, c1: g, d0: g, d1: g};
test = _.override(gg, rr).toSource() === ({a0:"g", a1:"g", b0:"g", b1:"r", c0:"g", c1:"r", d0:"g", d1:"g"}).toSource();
console.log('test override:\t'+test);
})();
(function() {
var g = 'g', r = 'r', rr = {b1: r, b2: r, b3: r, c1: r, c2: r, c3: r},
gg = {a0: g, a1: g, b0: g, b1: g, c0: g, c1: g, d0: g, d1: g};
test = _.minus(gg, rr).toSource() === ({a0:"g", a1:"g", b0:"g", c0:"g", d0:"g", d1:"g"}).toSource();
console.log('test minus:\t'+test);
})();
(function() {
var g = 'g', r = 'r', rr = {b1: r, b2: r, b3: r, c1: r, c2: r, c3: r},
gg = {a0: g, a1: g, b0: g, b1: g, c0: g, c1: g, d0: g, d1: g},
test = _.intersect(gg, rr).toSource() === ({b1:"g", c1:"g"}).toSource();
console.log('test intersect:\t'+test);
})();