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

Access value from JavaScript object via array-string

本文关键字:对象 JavaScript 访问 数组 字符串      更新时间:2023-09-26

我的问题是,我有一个json对象,其中包含一个数组。

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

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

var string = 'items[1]';

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

eval('object.'+string);

这将返回入口2。

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

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

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

解释:

正则表达式构建两个组:

('w+) : a string
'[('d+)'] : some digits between brackets

并且这些组位于匹配返回的数组的索引1和2处。

+something解析该数字。这里并不严格需要它,因为如果可以转换的话,数组会接受字符串,但我发现当解释这种转换时,代码更可读。

在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"

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

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

尝试类似的东西

  object.items[1];