[英]Merging Two Arrays using Typescript or JavaScript
我正在努力将两个 arrays 合并为一个。 我使用接口从 MongoDB 创建并获取数据。
export interface IWeeklyAssessmentData {
dayName: string;
dayDate: string;
fromDb: boolean;
}
以下是数据库中的示例数据
[
{ dayName: 'Sun', dayDate: datetime.datetime(2023, 1, 8, 0, 0), fromDb: 'true' },
{ dayName: 'Tue', dayDate: datetime.datetime(2023, 1, 10, 0, 0), fromDb: True }
];
我在代码的数据和计算部分中有一组不是来自数据库的信息。 这是代码片段
data: () => ({
weekDays: [
{
dayName: "Sun",
dayDate: new Date(
new Date().setDate(new Date().getDate() - new Date().getDay() + 0)
)
.toISOString()
.slice(0, 10),
fromDb: false,
},
{
dayName: "Mon",
dayDate: new Date(
new Date().setDate(new Date().getDate() - new Date().getDay() + 1)
)
.toISOString()
.slice(0, 10),
fromDb: false,
}
]
}),
computed: {
weeklyAssessmentData(): IWeeklyAssessmentData {
return TrainWiseService.weeklyAssessment;
},
}
如何合并来自 weeklyAssessmentData 和 weekDays 的数组。 如果 dayName 相同,我想从数据库中保留 object。 我看到和尝试过的所有代码似乎都有效。
在我的计算中,我尝试使用这段代码来合并它,但它给出了错误:
“CombinedVueInstance<Vue”类型上不存在属性“weeklyAssessmentData”
RelatedDays() {
let dayNames = new Set(this.weeklyAssessmentData.map(dayName => dayName.assessmentDayName))
let merged = [...this.weekDays, ...this.weekDays.filter(d => dayNames.has(d.assessmentDayName))]
return merged;
},
这是我期望来自两个 arrays 的最终 output:
merged: [
{ dayName: 'Sun', dayDate: '2023-01-08T00:00:00.000+00:00', fromDb: 'true' },
{ dayName: 'Mon', dayDate: '2023-01-09T00:00:00.000+00:00', fromDb: 'false' },
{ dayName: 'Tue', dayDate: '2023-01-10T00:00:00.000+00:00', fromDb: 'true' }
]
您可以遍历所有记录的集合并忽略结果中已有的记录(基于日期名称)(如果它们不是来自数据库)。
如果我理解正确你的问题,这里是它的简化版本:
const recordsNotFromDB = [{ day: "Mon", val: 1, database: false }, { day: "Tue", val: 2, database: false }, { day: "Wed", val: 3, database: false }, ] const recordsFromDB = [{ day: "Mon", val: 10, database: true }, { day: "Wed", val: 30, database: true }, ] const merged = {} for (let record of [...recordsNotFromDB, ...recordsFromDB]) { if (.(record.day in merged) || record.database) { merged[record.day] = record } } const result = Object.values(merged) console.log(result)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.