Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过数组字符串从JavaScript对象访问值_Javascript_Json - Fatal编程技术网

通过数组字符串从JavaScript对象访问值

通过数组字符串从JavaScript对象访问值,javascript,json,Javascript,Json,我的问题是我有一个json对象,在这里有一个示例 var object = { 'items':['entry1','entry2'] } 我希望通过接收到的不应更改的常量字符串访问“entry2” var string = 'items[1]'; 我解决这个问题的唯一方法是通过求值函数 eval('object.'+string); 这使我返回entry2 如果不使用eval(),是否还有其他方法可以实现这一点? 像object[string]或object.string这样试试

我的问题是我有一个json对象,在这里有一个示例

var object = {
 'items':['entry1','entry2']
}
我希望通过接收到的不应更改的常量字符串访问“entry2”

var string = 'items[1]';
我解决这个问题的唯一方法是通过求值函数

eval('object.'+string);
这使我返回entry2

如果不使用
eval()
,是否还有其他方法可以实现这一点?
object[string]
object.string

这样试试

  object.items[1];

假设字符串总是相同的形式,可以使用正则表达式提取其部分:

var m = string.match(/(\w+)\[(\d+)\]/);
var item = object[m[1]][+m[2]];

说明:

正则表达式构建两个组:

(\w+) : a string
\[(\d+)\] : some digits between brackets
这些组位于返回的数组的索引1和索引2处


+something
解析数字。这里并不严格需要它,因为数组接受字符串(如果可以转换),但我发现在明确转换后代码更可读。

首先,可以从内部获取数组:

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

除此之外,您可以使用以下函数:

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"

字符串
的可能值是什么?在本例中,“项[0]”或“项[1]”是不可能的,因为项[1]作为字符串接收。。。这就是我的问题……正如我之前所说的,项[1]是作为字符串从请求接收的,所以它不是静态代码。这是一个字符串='items[1]'这是解决方案,但我似乎没有正确理解它。无论如何,它是有效的,我必须检查这个方法是如何工作的。Thx:)是的,我也在谷歌上找到了这个方法,它帮了我很多忙。Thx:)这真的给我的答案增添了什么吗?这只是为了理解;)但我尊重你的建议