繁体   English   中英

将字符串转换为javascript关联数组

[英]Converting a string to a javascript associative array

我有一个弦

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 missing ; before statement ,带有指向( [ )中第一个括号的箭头。 "var masterkey["key1"]["key2"];"

我知道eval()不好用,所以如果您有任何建议,最好不使用它,我将不胜感激!

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

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/

function parse(s, obj) {
    s.match(/\w+/g).reduce(function(o, p) { return o[p] = {} }, obj);
    return obj;
}

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

现在试试这个

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

document.write("var "+fullName+";");

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

线

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

不是有效的javascript语句。

为变量分配值时,必须使用= 简单地将一些值连接到变量名的末尾将不起作用。

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

这看起来像是尝试将什么都没有的“ key1”属性的“ key2”属性分配给masterkey。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM