我有一个像这样的数据结构:
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的值(即“第1部分”)填充。part2quantity填充60。
someObject.part1.name
无论如何,可以使用纯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');
编辑一些人已经注意到,如果传递的字符串最左边的索引与对象内正确嵌套的条目不对应,则此代码将引发错误。这是一个有效的问题,但是IMHO最好try / catch在调用时使用块来解决,而不是让此函数静默返回undefined无效索引。