Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何正确映射数组以访问其嵌套数组中的属性?_Javascript - Fatal编程技术网

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'));
});