无法在对象路径

时间:2017-09-10 21:46:28

标签: javascript

我有这段代码:

success(JSON.parse(xhr.responseText).items[0].snippet.title);

问题是我可以通过此访问我想要的内容,但我希望能够这样做:

var path = 'items[0].snippet.title';
success(JSON.parse(xhr.responseText).path);

它不起作用:(

它可能只是我无法弄清楚原因。

谢谢!

1 个答案:

答案 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]);