我有以下JSON对象:
var test = {
data: [{
itemID: 0,
categories: [{
id: 0,
type: 'a',
name: 'world'
}, {
id: 1,
type: 'b',
name: 'plants'
}]
},
{
itemID: 1,
categories: [{
id: 2,
type: 'w',
name: 'cars'
}, {
id: 3,
type: 't',
name: 'bicycles'
}]
}
]
};
console.log([].concat
.apply([], test.data.map(item => item.categories.map(el => el.type))));
我想做的是获取数组中的所有类型。 因此结果应如下所示:
['a', 'b', 'w', 't']
我做了什么:
[].concat
.apply([], test.data.map(item => item.categories.map(el => el.type)))
我觉得这可以轻松完成。
有人知道更好的解决方案吗?
答案 0 :(得分:3)
您可以使用Array.prototype.map()和Array.prototype.flat():
flat()
方法将创建一个新数组,其中所有子数组元素都将递归地连接到其中,直到指定的深度为止。
深度为可选
的位置指定嵌套数组结构应展平的深度级别。默认为1。
var test = {
data: [{
itemID: 0,
categories: [{
id: 0,
type: 'a',
name: 'world'
}, {
id: 1,
type: 'b',
name: 'plants'
}]
},
{
itemID: 1,
categories: [{
id: 2,
type: 'w',
name: 'cars'
}, {
id: 3,
type: 't',
name: 'bicycles'
}]
}
]
};
var type = test.data.map(item => item.categories.map(el => el.type)).flat();
console.log(type);
答案 1 :(得分:2)
var test = {data: [{itemID: 0,categories: [{id: 0,type: 'a',name: 'world'}, {id: 1,type: 'b',name: 'plants'}]},{itemID: 1,categories: [{id: 2,type: 'w',name: 'cars'}, {id: 3,type: 't',name: 'bicycles'}]}]};
let result = test.data.reduce((a,c) => a.concat(c.categories.map(v => v.type)), []);
console.log(result);