JavaScript—是否有一种简单的方法可以获取嵌套JSON中每次出现的特定键的值
我有一个类似于以下内容的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: {
[
{
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
有更简洁的方法,您不能只编写嵌套循环吗?