我有这段代码:
success(JSON.parse(xhr.responseText).items[0].snippet.title);
问题是我可以通过此访问我想要的内容,但我希望能够这样做:
var path = 'items[0].snippet.title';
success(JSON.parse(xhr.responseText).path);
它不起作用:(
它可能只是我无法弄清楚原因。
谢谢!
答案 0 :(得分:0)
要按字符串访问对象属性,您需要使用[]表示法:
var foo = {bar : 2};
foo['bar']; // 2
但是这对于嵌套属性不起作用,这是我将使用Array.reduce和ES6的方法:
let path = 'items.snippet.title';
let response = JSON.parse(xhr.responseText);
let result = path.split('.').reduce((pre,cur) => {
return pre[cur];
}, response);
success(result);
在第一次迭代中,pre将是响应,并且cur' items'返回result.items等,它在访问数组索引时不起作用,所以你需要在reduce函数中添加一些额外的逻辑。
const [, cur, position] = cur.match(/^([^\[]+)(?:\[(\d+)])?$/);
// filter foo[1] capturing foo and 1, then assign them using destructuring.
// Thanks for edit!
return ( Array.isArray(pre[cur]) ? pre[cur][position] : pre[cur]);