【问题标题】:(Un)Set nested array values by string input(Un)通过字符串输入设置嵌套数组值
【发布时间】:2012-05-28 15:22:42
【问题描述】:

我有这样的功能:

Session.get = function(key) {
    if (!window["_SESSION"] || typeof key == 'undefined') {
        return window["_SESSION"] || {};
    }

    if (key.indexOf('.') === -1) {
        return window["_SESSION"][key] || {};
    }

    var keyArr = key.split('.'), val = window["_SESSION"];

    for ( var i = 0; i < keyArr.length; i++) {
        if (typeof val[keyArr[i]] === 'undefined') {
            return null;
        }
        val = val[keyArr[i]];
    }

    return val;
}

这个函数允许我在函数之外获取没有临时变量的嵌套值。示例Session.get('var.nestedvar')window[_SESSION']['var']['nestedvar'] 的返回值。

Bat 我怎样才能像这样(取消)设置变量?尝试delete val; 但没有用.. javascript 引用是如何工作的?有人知道完成类似功能的任何替代方法吗?

【问题讨论】:

    标签: javascript arrays function session reference


    【解决方案1】:

    你可以像这样被父级删除:

    [10:00:00.380] a = {'root': {'home':'~'}}
    [10:00:00.385] ({root:{home:"~"}})
    --
    [10:00:09.625] b = a['root']
    [10:00:09.631] ({home:"~"})
    --
    [10:00:20.569] delete b['home']
    [10:00:20.573] true
    [10:00:21.684] a
    [10:00:21.688] ({root:{}})
    

    【讨论】:

      【解决方案2】:

      您可以对现有代码稍作修改,如下所示:

      Session.delete = function(key) {
          if (!window["_SESSION"] || typeof key == 'undefined') {
              return false;
          }
          if (key.indexOf('.') === -1) {
              if (key) {
                  delete key;
                  return true;
              }
          }
      
          var keyArr = key.split('.'), val = window["_SESSION"];
      
          var keyDepth = keyArr.length;
          for ( var i = 0; i < keyDepth-1; i++) {
              if (typeof val[keyDepth] === 'undefined') {
                  return null;
              }
              val = val[keyDepth];
          }
          if (val[keyDepth-1]) {
              delete val[keyDepth-1];
              return true;
          }
          return false;
      }
      

      【讨论】:

      • 您可以在变量中设置keyArr.length-1,因为现在您在循环的每次迭代中都计算它+两次。
      • 正如我所需要的,但 core1024 是第一个,所以 +1 :)
      猜你喜欢
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      • 2012-03-26
      • 2019-04-09
      • 1970-01-01
      • 2021-08-04
      相关资源
      最近更新 更多