【问题标题】:Converting a string to a javascript associative array将字符串转换为 javascript 关联数组
【发布时间】:2012-03-01 18:00:00
【问题描述】:

我有一个字符串

string = "masterkey[key1][key2]";

我想从中创建一个关联数组,以便它计算为:

{
  masterkey: {
    key1: {
      key2: value
    }
  }
}

我试过这个:

var fullName = string;
fullName = fullName.replace(/\[/g, '["');
fullName = fullName.replace(/\]/g, '"]');
eval("var "+fullName+";");

但我收到错误:missing ; before statement 带有指向 ([) "var masterkey["key1"]["key2"];" 中的第一个括号的箭头

我知道eval()不好用,所以如果你有什么建议,最好不要用,非常感谢!

【问题讨论】:

  • 欢迎(回来?)Stack Overflow!当您编写问题时,右侧有一个方便的 如何格式化 框,在文本区域上方有一个 [?] 按钮。两者都值得一读。 如何格式化中的第四个要点告诉您如何标记代码以使其正确显示。
  • 仅供参考:Javascript 中的“关联数组”是对象。数组在 Javascript 中永远不会关联。

标签: javascript string json associative-array javascript-objects


【解决方案1】:

不是最漂亮的,但对我有用:

var
  path = "masterkey[key1][key2]",
  scope = {};

function helper(scope, path, value) {
  var path = path.split('['), i = 0, lim = path.length;
  for (; i < lim; i += 1) {
    path[i] = path[i].replace(/\]/g, '');

    if (typeof scope[path[i]] === 'undefined') {
      scope[path[i]] = {};
    }

    if (i === lim - 1) {
      scope[path[i]] = value;
    }
    else {
      scope = scope[path[i]];
    }
  }
}

helper(scope, path, 'somevalue');

console.log(scope);

演示:http://jsfiddle.net/hR8yM/

【讨论】:

  • +1 看起来不错。也许提供一个 JSFiddle 以便我们可以看到它实际上是 没问题。 :)
【解决方案2】:
function parse(s, obj) {
    s.match(/\w+/g).reduce(function(o, p) { return o[p] = {} }, obj);
    return obj;
}

console.dir(parse("masterkey[key1][key2]", {}))

【讨论】:

    【解决方案3】:

    现在试试这个

    string = "masterkey[key1][key2]";
    var fullName = string;
    fullName = fullName.replace(/\[/g, '[\'');
    fullName = fullName.replace(/\]/g, '\']');
    
    document.write("var "+fullName+";");
    

    【讨论】:

      【解决方案4】:

      1) 使用eval时,你提供的参数必须是有效的、完整的javascript。

      线

       var masterkey["key1"]["key2"];
      

      不是有效的 javascript 语句。

      给变量赋值时,必须使用=。简单地将一些值连接到变量名的末尾是行不通的。

      2) var masterkey = ["key1"]["key2"] 没有意义。

      这看起来像是试图将“key1”属性的“key2”属性分配给masterkey。

      如果您希望结果与您提供的示例对象一样,那么您需要创建它。也就是说,正确解析字符串以创建对象比使用正则表达式将其转换为一些脚本进行评估要好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-26
        • 1970-01-01
        • 2018-03-08
        • 2020-11-21
        • 2016-07-21
        • 1970-01-01
        • 2018-07-12
        相关资源
        最近更新 更多