通过数组字符串从JavaScript对象访问值
我的问题是我有一个json对象,在这里有一个示例通过数组字符串从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这样试试
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:)这真的给我的答案增添了什么吗?这只是为了理解;)但我尊重你的建议