Javascript 如何正确映射数组以访问其嵌套数组中的属性?
假设我有一个对象数组:Javascript 如何正确映射数组以访问其嵌套数组中的属性?,javascript,Javascript,假设我有一个对象数组: const array = [ { "fieldA":"abc", "fieldB":[ { "fieldC":{ "fieldD":"I am here!" } }, { "fieldC":{ "fieldD":"And I am here!"
const array = [
{
"fieldA":"abc",
"fieldB":[
{
"fieldC":{
"fieldD":"I am here!"
}
},
{
"fieldC":{
"fieldD":"And I am here!",
},
}
]
}
]
如何访问数组中每个对象的fieldD
属性值
我所尝试的:
console.log(array.map(({ fieldB }) =>
fieldB.map(({ fieldC: { fieldD } }) => ({ fieldD }))
))
但是,这将返回一个父数组,该数组在其0
索引处包含一个数组,该数组包含具有名为fieldD
的键的对象
我想返回一个仅包含值的数组,即:
// expected output
[ 'I am here!', 'And I am here!' ]
使用
.map
是否可以实现这一点?您几乎已经获得了它。您可以使用=>fieldD
将其映射到其值,而不是将fieldD
映射到具有=>({fieldD})
的对象。要删除内部数组,可以使用.flatMap()
,它将内部数组内容映射到一个较大的父级:
const数组=[{“fieldA”:“abc”,“fieldB”:[{“fieldC”:{“fieldD”:“我在这里!”},{“fieldC”:{“fieldD”:“我在这里!”,},}];
console.log(array.flatMap({fieldB})=>
fieldB.map({fieldC:{fieldD})=>fieldD)
))
试试这个
const数组=[
{
“fieldA”:“abc”,
“字段B”:[
{
“fieldC”:{
“菲尔德”:“我在这里!”
}
},
{
“fieldC”:{
“菲尔德”:“我在这里!”,
},
}
]
}
];
让结果=数组。减少((acc,项目)=>{
让结果=item.fieldB.map(elem=>elem.fieldC.fieldD);
返回结果;
}, []);
控制台日志(结果)代码>
const数组=[
{
“fieldA”:“abc”,
“字段B”:[
{
“fieldC”:{
“菲尔德”:“我在这里!”
}
},
{
“fieldC”:{
“菲尔德”:“我在这里!”,
},
}
]
}
]
console.log(array.map({fieldB})=>
map({fieldC:{fieldD})=>(fieldD))
)[0])
您需要使用递归来实现您的目标:
const数组=[
{
“fieldA”:“abc”,
“字段B”:[
{
“fieldC”:{
“菲尔德”:“我在这里!”
}
},
{
“fieldC”:{
“菲尔德”:“我在这里!”,
},
}
]
}
];
常量findField=函数(对象,字段){
用于(输入obj){
如果(对象的类型[键]=“对象”){
返回findField(对象[键],字段);
}else if(键==字段){
返回obj[键];
}
}
}
array.forEach(obj=>{
console.log(findField(obj,'fieldD'));
});代码>