通过array-string从JavaScript对象访问值

时间:2013-09-04 11:19:54

标签: javascript json

我的问题是我有一个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

相同

4 个答案:

答案 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];