javascript - 将两个变量加在一起/查找
问题描述
除非主题是相同的名称,否则它可以工作。然后我得到了第二个相同主题的第一个日期。
我无法更改数组,因为它是通过 API。但是,如果第一个日期已经设置在数学上,我可以以某种方式这样做,那么它应该将第二个日期添加到第二个主题吗?现在第二个主题得到第一次约会
var subjects = [
{ name: "math" }, //The first
{ name: "sports" },
{ name: "math" }, //The second
{ name: "art" },
];
var subjectdates = [
{ name: "math", year: 2017 }, //first date
{ name: "sports", year: 2018 },
{ name: "math", year: 2019 }, //second date
{ name: "art", year: 2020 },
];
const addDates = subjects.map((classes) => ({
subject: classes,
end_subject_date: subjectdates.find((item) => classes.name == item.name),
}));
console.log(addDates);
解决方案
使用Array#reduce
onsubjectdates
构造 a Map
,其中 thekey
是 the name
,值是 this 的元素列表name
。
然后,在循环中,要获取end_subject_date
,您可以使用Map#get
获取 this 的元素列表name
,并Array#shift
获取和删除第一个元素:
const
subjects = [ {name:"math"}, {name:"sports"}, {name:"math"}, {name:"art"} ],
subjectdates = [ {name:"math",year:2017}, {name:"sports",year:2018}, {name:"math",year:2019}, {name:"art",year:2020} ];
const subjectDatesMap = subjectdates.reduce((map, item) =>
map.set(
item.name,
[...(map.get(item.name) || []), item]
)
, new Map);
const addDates = subjects.map(classes => ({
subject: classes,
end_subject_date: (subjectDatesMap.get(classes.name) || []).shift()
}));
console.log(addDates);
推荐阅读
- python - 如何使用 Beautifulsoup 抓取网站
- angular - Angular 11 向 .Net Core 后端发布 pdf 请求
- if-statement - IF 函数(SharePoint 计算列)返回的数据类型是什么?
- php - 在停用帐户时为特定用户撤销 JWT 令牌
- react-native-native-module - 文档选择器在本机反应中不起作用
- java - 在 JAVA 中创建给出长度和值范围的随机 Int 数组
- c - 函数“读取”的冲突类型
- c# - Poco 对象的通用 XML 解析器
- macos - 自从 macOS Big Sur 更新以来,GitKraken 非常慢
- python - Python遍历文件夹及其子文件夹以读取CSV正在获取文件名,但在read_csv上它返回的文件未找到