我正在尝试完成本教程,但我无法弄清楚为什么教师给出的答案对我不起作用。
有一组用户(对象),每个用户都将favoriteBooks作为嵌套对象。
我们将使用map和reduce来创建一个包含所有用户所有喜爱书籍的数组。
我底部的代码是我目前所拥有的代码,但也是教师所说的解决方案。他的代码致力于创建精确的解决方案(在他的视频中)。
但是,我认为问题是当第二张地图发挥作用时,还有另一层嵌套数组可以通过。
有人可以对此有所了解吗?我无法理解我的生活。
谢谢!
Managing State in Apache Flink - Tzu-Li (Gordon) Tai
答案 0 :(得分:1)
您需要使用reduce函数来展平嵌套数组和map函数,以便为reducer中的每个用户返回书名。然后最后使用一些扩展运算符,你可以填充reducer的累加器(arr
)并得到整个列表。
const users = [
{
name: 'Samir',
age: 27,
favoriteBooks:[
{title: 'The Iliad'},
{title: 'The Brothers Karamazov'}
]
},
{
name: 'Angela',
age: 33,
favoriteBooks:[
{title: 'Tenth of December'},
{title: 'Cloud Atlas'},
{title: 'One Hundred Years of Solitude'}
]
},
{
name: 'Beatrice',
age: 42,
favoriteBooks:[
{title: 'Candide'}
]
}
];
// Result: ['The Iliad', 'The Brothers Karamazov', 'Tenth of December', 'Cloud Atlas', 'One Hundred Years of Solitude', 'Candide'];
const books = users
.reduce((arr, user) => {
const favBooks = user.favoriteBooks;
return [...arr, ...favBooks.filter(el => (arr.indexOf(el.title) < 0)).map(el => el.title)];
}, []);
console.log(books);
&#13;
答案 1 :(得分:0)
您可以使用array#map
获取每个用户的favoriteBooks
,然后使用array#concat
将其展平为单个数组。然后使用array#map
,获取所有title
的数组。
const users = [ { name: 'Samir', age: 27, favoriteBooks:[ {title: 'The Iliad'}, {title: 'The Brothers Karamazov'} ] }, { name: 'Angela', age: 33, favoriteBooks:[ {title: 'Tenth of December'}, {title: 'Cloud Atlas'}, {title: 'One Hundred Years of Solitude'}] }, { name: 'Beatrice', age: 42, favoriteBooks:[ {title: 'Candide'} ] } ],
titles = [].concat(...users.map(({favoriteBooks}) => favoriteBooks))
.map(({title}) => title);
console.log(titles);
&#13;
答案 2 :(得分:0)
const users = [
{
name: 'Samir',
age: 27,
favoriteBooks:[
{title: 'The Iliad'},
{title: 'The Brothers Karamazov'}
]
},
{
name: 'Angela',
age: 33,
favoriteBooks:[
{title: 'Tenth of December'},
{title: 'Cloud Atlas'},
{title: 'One Hundred Years of Solitude'}
]
},
{
name: 'Beatrice',
age: 42,
favoriteBooks:[
{title: 'Candide'}
]
}
];
const array = users.reduce((arr, val) => {
val.favoriteBooks.map ( (t) =>{
arr.push(t.title)
})
return arr
}, []);
console.log( array)