javascript - javascript映射两个嵌套数组并通过查找修改现有
问题描述
我有一个kids
如下所示的对象:
const kids = {
name: 'john',
extra: {
city: 'London',
hobbies: [
{
id: 'football',
team: 'ABC',
},
{
id: 'basketball',
team: 'DEF',
},
],
},
};
我有以下对象,其中包含所有运动和额外信息。
const sports = [
{
name: 'volleyball',
coach: 'tom',
},
{
name: 'waterpolo',
coach: 'jack',
},
{
name: 'swimming',
coach: 'kate',
},
{
name: 'football',
coach: 'sara',
},
];
我想获取id
hobbies 数组中所有 s 的列表,并遍历 sports 数组中的每个运动项目,并找到,为该对象添加一个额外的字段available
并赋予 值true
,因此结果将如下所示:
const result = [
{
name: 'volleyball',
coach: 'tom',
},
{
name: 'waterpolo',
coach: 'jack',
},
{
name: 'swimming',
coach: 'kate',
},
{
name: 'football',
coach: 'sara',
available: true
},
];
顺便说一句,这是我的尝试:
const result = kids.extra.hobbies.map(a => a.id);
for (var key in sports) {
console.log(sports[key].name);
const foundIndex = result.indexOf(sports[key].name);
if ( foundIndex > -1) {
sports[key].available = true;
}
}
console.log(sports)
但这太长了......我正在寻找一个看起来代码和健壮逻辑的班轮。
解决方案
这可以通过多种方式完成;但是,一个简单的方法是将问题分为两个步骤:
我们可以先用Array.map()
函数把孩子的爱好扁平化成一个数组:
const hobbies = kids.extra.hobbies.map(hobby => hobby.id);
然后,我们可以遍历运动数组并向active
新数组中存在的任何对象添加一个属性hobbies
:
const result = sports.map(sport => {
if (hobbies.indexOf(sport.name) !== -1) {
sport.available = true;
}
return sport;
})
完整的解决方案
const kids = {
name: 'john',
extra: {
city: 'London',
hobbies: [{
id: 'football',
team: 'ABC',
},
{
id: 'basketball',
team: 'DEF',
},
],
},
};
const sports = [{
name: 'volleyball',
coach: 'tom',
},
{
name: 'waterpolo',
coach: 'jack',
},
{
name: 'swimming',
coach: 'kate',
},
{
name: 'football',
coach: 'sara',
},
];
const hobbies = kids.extra.hobbies.map(hobby => hobby.id);
const result = sports.map(sport => {
if (hobbies.indexOf(sport.name) !== -1) {
sport.available = true;
}
return sport;
})
console.log(result);
推荐阅读
- javascript - 在 PHP/Javascript 中获取 301/302 转发的原始 url
- xamarin.ios - 无法在真实设备上部署 Xamarin Forms iOS 应用程序以在 Windows 上进行调试
- rabbitmq - Celery 发布者不会将消息发送到预期的 rabbitmq 队列
- javascript - 如何仅在日期 javascript 中返回 HH:mm
- python - 当输入为 int() 时 Python 不能忽略 str
- css - Angular 样式不适用于表单
- c++ - 堆上的一个元素是否有一些 STL“容器”?
- mongodb - 如何从MongoDB管道中的对象数组中获取特定字段
- javascript - 无法从 MongoDB Atlas 触发器中的集合中读取数据
- php - 如何将点分隔文本转换为数组?