Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.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—是否有一种简单的方法可以获取嵌套JSON中每次出现的特定键的值_Javascript_Arrays_Json_Angular_Ecmascript 6 - Fatal编程技术网

JavaScript—是否有一种简单的方法可以获取嵌套JSON中每次出现的特定键的值

JavaScript—是否有一种简单的方法可以获取嵌套JSON中每次出现的特定键的值,javascript,arrays,json,angular,ecmascript-6,Javascript,Arrays,Json,Angular,Ecmascript 6,我有一个类似于以下内容的JSON结构: [ { cells: [ { id: "1", cellType: 3, widget: { id: 1, description: "myDesc"} }, { id: "2", cellType: 4, widget: { id: 2, description: "myDesc2"} } ] }, { cells: [ { id: "3", cellType: 5, widget: {

我有一个类似于以下内容的JSON结构:

[
  {
    cells: [
     { id: "1", cellType: 3, widget: { id: 1, description: "myDesc"} },
     { id: "2", cellType: 4, widget: { id: 2, description: "myDesc2"} }
    ]
  },
  {
    cells: [
      { id: "3", cellType: 5, widget: { id: 3, description: "myDesc3"} }
    ]
  },
  ...
]
如何使用EcmaScript(或Angular 2+中提供的任何东西)将每个
小部件的值放入一个单独的数组,而不使用库(包括JQuery)?我需要这样的最终阵列:

[
  {
    id: 1,
    description: "myDesc"
  },
  {
    id: 2,
    description: "myDesc2"
  },
  ... 
]
更新

(感谢@Felix Kling的第一部分)-我发现我可以用它获得所有小部件:

JSON.parse(json)[0].forEach( c => c.cells.forEach( c2 => console.log(c2.widget)));
你可以用

让输入=[
{
单元格:[
{id:“1”,单元类型:3,小部件:{id:1,说明:“myDesc”},
{id:“1”,单元类型:4,小部件:{id:2,说明:“myDesc2”}
]
},
{
单元格:[
{id:“3”,单元类型:5,小部件:{id:3,说明:“myDesc3”}
]
},
];
让结果=输入。减少((结果,当前)=>{
返回result.concat(current.cells.map(x=>x.widget));
}, [])
控制台日志(结果)
您可以使用
.map()
.concat()
获得所需的结果:

let数据=[{
单元格:[
{id:“1”,单元类型:3,小部件:{id:1,说明:“myDesc”},
{id:“1”,单元类型:4,小部件:{id:2,说明:“myDesc2”}
]}, {
单元格:[
{id:“3”,单元类型:5,小部件:{id:3,说明:“myDesc3”}
]
}];
让result=[].concat(…data.map(({cells})=>cells.map(({widget}=>widget));
控制台日志(结果)

.as控制台包装{max height:100%!important;top:0;}
[].concat(…JSON.parse(JSON.map)(obj=>obj.cells.map(cell=>cell.widget)))
myDesc3
将不属于此数组?抱歉@void我已经澄清了这个问题-所有小部件对象都应该属于最终数组的一部分,而使用
reduce
有更简洁的方法,您不能只编写嵌套循环吗?