【问题标题】:how to recognize in javascript dictionary如何在javascript字典中识别
【发布时间】:2016-01-14 09:28:18
【问题描述】:
有什么办法可以取一个JavaScript字符串比如
"program[one] = js"
并在此字符串上运行并使其可访问,以便在我键入时
console.log(program.one);
我会得到js
【问题讨论】:
标签:
javascript
arrays
dictionary
【解决方案1】:
您可以使用eval 方法(尽管不强烈推荐)并执行以下操作:
var program = {};
var str = "program['one'] = 'js'";
eval(str);
console.log(program.one);
【解决方案2】:
你在考虑这个倒退。
你想要的是一些代表你可以解析的 JS 对象的 JSON。
var json = '{"program":{"one": "js"}}';
var obj = JSON.parse(json);
obj.program.one // js
即使您不考虑这个问题,您确实需要返回并找出为什么您需要使用类似“program[one] = js”,因为这种做法是错误的,只会导致心痛。
DEMO
【解决方案3】:
假设您只想允许字符串写入program,并且唯一有效的字符串格式为program[name] = value,则有一个不坏的解决方案:
var program = {};
var input = "program[one] = js";
var patt = /program\[(.*?)\] = (.*)/;
var result = patt.exec(input); // Array [ "program[one] = js", "one", "js" ]
program[result[1]] = result[2];
console.log(program.one); // js
编辑:如果您需要支持引号和分号结尾,您可能需要调整正则表达式 (patt)。
使用eval 是considered harmful。如果您无法控制传递给它的字符串(通常是这种情况),它可以运行任何允许代码注入的代码。 不,不要假装你可以做我上面对任意程序所做的事情。另一方面,如果您可以控制字符串,则不需要 eval - 尽管我接受如果您使用 metaprogramming by code generation in javascript 可能会很实用。