2

我的问题是我有一个 json-object 和数组到这里的一个例子。

var object = {
 'items':['entry1','entry2']
}

我想通过我收到且不应更改的常量字符串访问“entry2”。

var string = 'items[1]';

我解决这个问题的唯一方法是通过 eval 函数......

eval('object.'+string);

这让我返回 entry2。

有没有其他方法可以在不使用的情况下实现这一目标eval()?喜欢object[string]object.string

4

4 回答 4

3

假设您的字符串始终是相同的形式,您可以使用 regex 提取其部分:

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解析数字。这里不是严格需要的,因为如果可以转换,数组接受一个字符串,但我发现当这个转换被明确时,代码更具可读性。

于 2013-09-04T11:26:43.053 回答
1

dystroy的 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"
于 2013-09-04T11:37:42.553 回答
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'

...我可以看到这是一个人为的例子,但请不要将您的对象称为“对象”,或将您的字符串称为“字符串”:s

于 2013-09-04T11:30:56.920 回答
-1

尝试这样的事情

  object.items[1];
于 2013-09-04T11:22:45.473 回答