#javascript #arrays #object
Вопрос:
У меня есть массив с данными:
const data = [
{
groupName: 'groupName1',
types: [
{
name: 'name1',
displayName: 'displayName1'
},
{
name: 'name2',
displayName: 'displayName2'
},
]
},
{
groupName: 'groupName2',
types: [
{
name: 'name3',
displayName: 'displayName3'
},
{
name: 'name4',
displayName: 'displayName4'
},
]
},
]
Мне нужно преобразовать этот массив так, чтобы к каждому объекту добавлялось дополнительное поле имени группы. Выход должен представлять собой массив с объектами, как показано ниже:
const resultData = [
{
groupName: 'groupName1',
name: 'name1',
displayName: 'displayName1'
},
{
groupName: 'groupName1',
name: 'name2',
displayName: 'displayName2'
},
{
groupName: 'groupName2',
name: 'name3',
displayName: 'displayName3'
},
{
groupName: 'groupName2',
name: 'name4',
displayName: 'displayName4'
},
]
Я попытался сделать это с помощью метода массива карт
const data = [{"groupName":"groupName1","types":[{"name":"name1","displayName":"displayName1"},{"name":"name2","displayName":"displayName2"}]},{"groupName":"groupName2","types":[{"name":"name3","displayName":"displayName3"},{"name":"name4","displayName":"displayName4"}]}]
const resultData = data.map((item) => {
item.types.map((item1) => {
return {
...item1,
groupName: item.groupName
}
})
return item
})
console.log(resultData)
Но это не возвращает массив, который мне нужен. Пожалуйста, скажите мне, как я могу преобразовать этот массив, чтобы каждый объект имел правильную структуру? Заранее благодарю вас!
Ответ №1:
Замените внешний Array.map()
вызов Array.flatMap()
на создание плоского массива и верните результат внутреннего вызова карты, а не исходный элемент.
const data = [{"groupName":"groupName1","types":[{"name":"name1","displayName":"displayName1"},{"name":"name2","displayName":"displayName2"}]},{"groupName":"groupName2","types":[{"name":"name3","displayName":"displayName3"},{"name":"name4","displayName":"displayName4"}]}]
const resultData = data.flatMap(({ types, groupName }) =>
types.map(item => ({
...item,
groupName
}))
)
console.log(resultData)
Ответ №2:
Я бы использовал reduce
.
data.reduce((carry, {types, groupName}) => carry.concat(types.map(d => ({...d, groupName}))), []);