index.js 785 B

1234567891011121314151617181920212223242526272829
  1. function merge(a, b, k) {
  2. if (typeof a === 'object' && typeof b === 'object')  {
  3. if (Array.isArray(a) && Array.isArray(b)) {
  4. for (k=0; k < b.length; k++) {
  5. a[k] = merge(a[k], b[k]);
  6. }
  7. } else {
  8. for (k in b) {
  9. if (k === '__proto__' || k === 'constructor' || k === 'prototype') break;
  10. a[k] = merge(a[k], b[k]);
  11. }
  12. }
  13. return a;
  14. }
  15. return b;
  16. }
  17. function dset(obj, keys, val) {
  18. keys.split && (keys=keys.split('.'));
  19. var i=0, l=keys.length, t=obj, x, k;
  20. while (i < l) {
  21. k = ''+keys[i++];
  22. if (k === '__proto__' || k === 'constructor' || k === 'prototype') break;
  23. t = t[k] = (i === l) ? merge(t[k],val) : (typeof(x=t[k])===typeof keys) ? x : (keys[i]*0 !== 0 || !!~(''+keys[i]).indexOf('.')) ? {} : [];
  24. }
  25. }
  26. exports.dset = dset;
  27. exports.merge = merge;