我有一个这样的数据结构:var someObject = {'part1': {'name':'第 1 部分','size':'20','qty':'50'},'part2': {'name':'第 2 部分',...
我有一个这样的数据结构:
var someObject = {
'part1' : {
'name': 'Part 1',
'size': '20',
'qty' : '50'
},
'part2' : {
'name': 'Part 2',
'size': '15',
'qty' : '60'
},
'part3' : [
{
'name': 'Part 3A',
'size': '10',
'qty' : '20'
}, {
'name': 'Part 3B',
'size': '5',
'qty' : '20'
}, {
'name': 'Part 3C',
'size': '7.5',
'qty' : '20'
}
]
};
我想使用这些变量访问数据:
var part1name = "part1.name";
var part2quantity = "part2.qty";
var part3name1 = "part3[0].name";
part1name 应填写 someObject.part1.name
的值,即 \'Part 1\'。part2quantity 也一样,填写 60。
有没有办法用纯 javascript 或 JQuery 来实现这一点?
我只是根据我已有的一些类似代码制作了这个,它似乎有效:
Object.byString = function(o, s) {
s = s.replace(/\[(\w+)\]/g, '.$1'); // convert indexes to properties
s = s.replace(/^\./, ''); // strip a leading dot
var a = s.split('.');
for (var i = 0, n = a.length; i < n; ++i) {
var k = a[i];
if (k in o) {
o = o[k];
} else {
return;
}
}
return o;
}
用法::
Object.byString(someObj, 'part3[0].name');
上的工作演示 http://jsfiddle.net/alnitak/hEsys/
编辑 有些人注意到,如果传递的字符串最左侧的索引与对象中正确嵌套的条目不对应,此代码将抛出错误。这是一个合理的担忧,但恕我直言,最好在 try / catch
调用时使用块来解决,而不是让此函数默默返回 undefined
无效索引。