我的问题是我有一个json-object with和array into这里的例子。
var object = {
'items':['entry1','entry2']
}
我希望通过我收到的常量字符串访问'entry2',不应该更改。
var string = 'items[1]';
我解决这个问题的唯一方法是通过eval函数...
eval('object.'+string);
这会让我返回第2条。
有没有其他方法可以在不使用eval()
的情况下实现这一目标?
与object[string]
或object.string
答案 0 :(得分:3)
假设您的字符串始终是相同的形式,您可以使用正则表达式提取其部分:
var m = string.match(/(\w+)\[(\d+)\]/);
var item = object[m[1]][+m[2]];
说明:
正则表达式构建了两个组:
(\w+) : a string
\[(\d+)\] : some digits between brackets
并且这些组位于match返回的数组的索引1和2处。
+something
解析数字。这里不是严格要求的,因为如果可以转换数组,则接受一个字符串,但是当发现这个转换时,我发现代码更具可读性。
答案 1 :(得分:1)
在dystroy's anwser之上,您可以使用此功能:
function getValueFromObject(object, key) {
var m = key.match(/(\w+)\[(\d+)\]/);
return object[m[1]][+m[2]];
}
示例:
var object = {
'items':['entry1','entry2']
}
var string = 'items[1]';
var value = getValueFromObject(object, string); //=> "entry2"
答案 2 :(得分:0)
首先,您可以从内部获取数组:
var entries = object.items // entries now is ['entry1','entry2']
然后你需要索引它以获得第二个项目(位置1)。所以你实现了你想要的目标:
var answer = entries[1] // answer is now 'entry2'
当然,您可以将其结合起来,一步完成:
var answer = object.items[1] // answer is now 'entry2'
...我可以看到这是一个人为的例子,但请不要打电话给你的对象'或者你的字符串'字符串' :■
答案 3 :(得分:-1)
尝试这样的事情
object.items[1];