function setByKeyPath()

in public/dexie.js [151:177]


  function setByKeyPath(obj, keyPath, value) {
    if (!obj || keyPath === undefined) return;
    if ("isFrozen" in Object && Object.isFrozen(obj)) return;
    if (typeof keyPath !== "string" && "length" in keyPath) {
      assert(typeof value !== "string" && "length" in value);
      for (var i = 0, l = keyPath.length; i < l; ++i) {
        setByKeyPath(obj, keyPath[i], value[i]);
      }
    } else {
      var period = keyPath.indexOf(".");
      if (period !== -1) {
        var currentKeyPath = keyPath.substr(0, period);
        var remainingKeyPath = keyPath.substr(period + 1);
        if (remainingKeyPath === "")
          if (value === undefined) delete obj[currentKeyPath];
          else obj[currentKeyPath] = value;
        else {
          var innerObj = obj[currentKeyPath];
          if (!innerObj) innerObj = obj[currentKeyPath] = {};
          setByKeyPath(innerObj, remainingKeyPath, value);
        }
      } else {
        if (value === undefined) delete obj[keyPath];
        else obj[keyPath] = value;
      }
    }
  }