繁体   English   中英

使用 Typescript 或 JavaScript 合并两个 Arrays

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM