UNPKG

tarifa

Version:

Your friendly toolchain for mobile app development on top of Apache Cordova

126 lines (108 loc) 3.52 kB
function mergeObject (obj1, obj2) { var obj3 = {}; for (var attr1 in obj1) { obj3[attr1] = obj1[attr1]; } for (var attr2 in obj2) { obj3[attr2] = obj2[attr2]; } return obj3; } function isObject(o) { return Object.prototype.toString.call(o) === '[object Object]'; } var deepMergeObject = module.exports.deepMergeObject = function (obj1, obj2) { if(!isObject(obj1) || !isObject(obj2)) return obj2; var into = {}, keys1 = Object.keys(obj1), keys2 = Object.keys(obj2), merger = function (obj) { return function (key) { var val = obj[key], isObj = val && typeof val === 'object' && !(val instanceof Date || val instanceof RegExp || val instanceof Array); into[key] = isObj ? deepMergeObject(into[key] || {}, val) : val; }; }; keys1.forEach(merger(obj1)); keys2.forEach(merger(obj2)); return into; }; module.exports.mergeObject = function (obj1, obj2, deep) { return deep ? deepMergeObject(obj1, obj2) : mergeObject(obj1, obj2); }; // find all values for key, deeply var findByKey = module.exports.findByKey = function (object, key, acc) { if (acc === undefined) acc = []; for (var prop in object) { if (prop === key) acc.push(object[prop]); if (object[prop] instanceof Object) acc = findByKey(object[prop], key, acc); } return acc; }; // filter object keys, not deeply module.exports.filterKeys = function (obj, predicate) { var res = {}; Object.keys(obj).filter(predicate).forEach(function (e) { res[e] = obj[e]; }); return res; }; // map object keys, not deeply module.exports.mapKeys = function (obj, mapƒ) { var res = {}; var keys = Object.keys(obj); keys.forEach(function(e) { var newKey = mapƒ(e); res[newKey] = obj[e]; }); return res; }; // map object values, not deeply module.exports.mapValues = function (obj, mapƒ) { var ret = {}, keys = Object.keys(obj); keys.forEach(function (key) { ret[key] = mapƒ(obj[key]); }); return ret; }; var toOneLevelObject = module.exports.toOneLevelObject = function (obj, into, prefix) { into = into || {}; prefix = prefix || ''; var keys = Object.keys(obj); keys.forEach(function (key) { var val = obj[key], isMultiLevel = val && typeof val === 'object' && !(val instanceof Date || val instanceof RegExp || val instanceof Array); if (isMultiLevel) toOneLevelObject(val, into, prefix + key + '$'); else into[prefix + key] = val; }); return into; }; module.exports.toMultiLevelObject = function (obj) { var keys = Object.keys(obj), into = {}; keys.forEach(function (key) { var val = obj[key], subKeys = key.split('$'), leafKey = subKeys.pop(), subObj = into; subKeys.forEach(function (subKey) { subObj = subObj[subKey] = subObj[subKey] || {}; }); subObj[leafKey] = val; }); return into; }; module.exports.isObject = function(x) { return x && typeof x === 'object'; }; module.exports.objectEqual = function (obj1, obj2) { var keys1 = Object.keys(obj1), keys2 = Object.keys(obj2), test = function (key) { return obj1[key] === obj2[key]; }; return keys1.every(test) && keys2.every(test); };