我有一个包含对象和数组的嵌套数据结构。我如何提取信息,即访问特定或多个值(或键)?例如:var data = { code: 42, i...
我有一个包含对象和数组的嵌套数据结构。如何提取信息,即访问特定值或多个值(或键)?
例如:
var data = {
code: 42,
items: [{
id: 1,
name: 'foo'
}, {
id: 2,
name: 'bar'
}]
};
我如何访问 name
中的第二项 items
?
要访问嵌套属性,您需要指定其名称,然后搜索该对象。
如果您已经知道确切的路径,那么您可以在脚本中对其进行硬编码,如下所示:
data['items'][1]['name']
这些也有效 -
data.items[1].name
data['items'][1].name
data.items[1]['name']
当您事先不知道确切的名称,或者用户为您提供了名称时。 然后需要动态搜索数据结构。 有人建议可以使用循环进行搜索 for
,但有一种非常简单的方法可以使用 Array.reduce
.
const data = { code: 42, items: [{ id: 1, name: 'foo' }, { id: 2, name: 'bar' }] }
const path = [ 'items', '1', 'name']
let result = path.reduce((a,v) => a[v], data)
路径是这样说的:首先获取带有键的对象 items
,该对象恰好是一个数组。然后获取 1
-st 元素(0 索引数组)。最后获取该数组元素中带有键的对象 name
,该对象恰好是字符串 bar
.
如果你有一条很长的路,你甚至可以用它 String.split
来让这一切变得更容易——
'items.1.name'.split('.').reduce((a,v) => a[v], data)
这只是普通的 JavaScript,没有使用任何第三方库,如 jQuery 或 lodash。