javascript - 在 JavaScript 中组合对象数组以形成一个新的数组

标签 javascript arrays

我希望通过按天匹配 2 个对象数组并生成一个包含原始 2 中相关数据的新对象数组来将它们合并为 1。目前我有这 2 个:

[
  { date: '9/30/2017', day: 'saturday' },
  { date: '10/1/2017', day: 'sunday' },
  { date: '10/2/2017', day: 'monday' },
  { date: '10/3/2017', day: 'tuesday' },
  { date: '10/4/2017', day: 'wednesday' },
  { date: '10/5/2017', day: 'thursday' },
  { date: '10/6/2017', day: 'friday' },
  { date: '10/7/2017', day: 'saturday' },
  { date: '10/8/2017', day: 'sunday' },
  { date: '10/9/2017', day: 'monday' },
  { date: '10/10/2017', day: 'tuesday' }
]

[
 {
    day: 'sunday',
    totalHours: 10,
    serveTimes: [ { startTime: 5, stopTime: 15 } ]
  },
  {
    day: 'monday',
    totalHours: 10,
    serveTimes: [ { startTime: 5, stopTime: 10 }, { startTime: 15, stopTime: 20 } ]
  },
  {
    day: 'tuesday',
    totalHours: 3,
    serveTimes: [ { startTime: 2, stopTime: 5 } ]
  },
  {
    day: 'wednesday',
    totalHours: 10,
    serveTimes: [ { startTime: 5, stopTime: 15 } ]
  },
  {
    day: 'thursday',
    totalHours: 5,
    serveTimes: [ { startTime: 5, stopTime: 7 }, { startTime: 20, stopTime: 23 } ]
  },
  {
    day: 'friday',
    totalHours: 5,
    serveTimes: [ { startTime: 5, stopTime: 10 } ]
  },
  {
    day: 'saturday',
    totalHours: 10,
    serveTimes: [ { startTime: 5, stopTime: 10 }, { startTime: 13, stopTime: 18 } ]
  }
]

我执行此操作的代码如下:

function finalFormat (a, d) {
  var combined = a.concat(d)
  var final = _(combined)
    .groupBy('day')
    .map(_.spread(_.assign))
    .value()
  return final
}

但是我返回的数组:

[
  {
    date: '10/7/2017',
    day: 'saturday',
    totalHours: 10,
    serveTimes: [ { startTime: 5, stopTime: 10 }, { startTime: 13, stopTime: 18 } ]
  },
  {
    date: '10/8/2017',
    day: 'sunday',
    totalHours: 10,
    serveTimes: [ { startTime: 5, stopTime: 15 } ]
  },
  {
    date: '10/9/2017',
    day: 'monday',
    totalHours: 10,
    serveTimes: [ { startTime: 5, stopTime: 10 }, { startTime: 15, stopTime: 20 } ]
  },
  {
    date: '10/10/2017',
    day: 'tuesday',
    totalHours: 3,
    serveTimes: [ { startTime: 2, stopTime: 5 } ]
  },
  {
    date: '10/4/2017',
    day: 'wednesday',
    totalHours: 10,
    serveTimes: [ { startTime: 5, stopTime: 15 } ]
  },
  {
    date: '10/5/2017',
    day: 'thursday',
    totalHours: 5,
    serveTimes: [ { startTime: 5, stopTime: 7 }, { startTime: 20, stopTime: 23 } ]
  },
  {
    date: '10/6/2017',
    day: 'friday',
    totalHours: 5,
    serveTimes: [ { startTime: 5, stopTime: 10 } ]
  }
]

只有 7 个日期的信息,我需要每个日期的信息。所以它应该像这样:

[
 {
    date: '9/30/2017',
    day: 'saturday',
    totalHours: 10,
    serveTimes: [ { startTime: 5, stopTime: 10 }, { startTime: 13, stopTime: 18 } ]
  },
{
    date: '10/1/2017',
    day: 'sunday',
    totalHours: 10,
    serveTimes: [ { startTime: 5, stopTime: 15 } ]
  },
{
    date: '10/2/2017',
    day: 'monday',
    totalHours: 10,
    serveTimes: [ { startTime: 5, stopTime: 10 }, { startTime: 15, stopTime: 20 } ]
  },
  {
    date: '10/3/2017',
    day: 'tuesday',
    totalHours: 3,
    serveTimes: [ { startTime: 2, stopTime: 5 } ]
  },
  {
    date: '10/7/2017',
    day: 'saturday',
    totalHours: 10,
    serveTimes: [ { startTime: 5, stopTime: 10 }, { startTime: 13, stopTime: 18 } ]
  },
  {
    date: '10/8/2017',
    day: 'sunday',
    totalHours: 10,
    serveTimes: [ { startTime: 5, stopTime: 15 } ]
  },
  {
    date: '10/9/2017',
    day: 'monday',
    totalHours: 10,
    serveTimes: [ { startTime: 5, stopTime: 10 }, { startTime: 15, stopTime: 20 } ]
  },
  {
    date: '10/10/2017',
    day: 'tuesday',
    totalHours: 3,
    serveTimes: [ { startTime: 2, stopTime: 5 } ]
  },
  {
    date: '10/4/2017',
    day: 'wednesday',
    totalHours: 10,
    serveTimes: [ { startTime: 5, stopTime: 15 } ]
  },
  {
    date: '10/5/2017',
    day: 'thursday',
    totalHours: 5,
    serveTimes: [ { startTime: 5, stopTime: 7 }, { startTime: 20, stopTime: 23 } ]
  },
  {
    date: '10/6/2017',
    day: 'friday',
    totalHours: 5,
    serveTimes: [ { startTime: 5, stopTime: 10 } ]
  }
]

作为js新手,我即将放弃。你们中有哪位聪明人可以帮助我吗?

最佳答案

您可以使用map方法。另外,我们可以使用Map集合在映射集合时具有 O(1) 访问项目的能力:

const uniqueDays = new Map(secondArray.map(s => [s.day, s]));
const result = firstArray.map(({date, day})=> ({date, ...uniqueDays.get(day)}));

一个例子:

const firstArray = [
  { date: '9/30/2017', day: 'saturday' },
  { date: '10/1/2017', day: 'sunday' },
  { date: '10/2/2017', day: 'monday' },
  { date: '10/3/2017', day: 'tuesday' },
  { date: '10/4/2017', day: 'wednesday' },
  { date: '10/5/2017', day: 'thursday' },
  { date: '10/6/2017', day: 'friday' },
  { date: '10/7/2017', day: 'saturday' },
  { date: '10/8/2017', day: 'sunday' },
  { date: '10/9/2017', day: 'monday' },
  { date: '10/10/2017', day: 'tuesday' }
];

const secondArray = [
  {
     day: 'sunday',
     totalHours: 10,
     serveTimes: [ { startTime: 5, stopTime: 15 } ]
   },
   {
     day: 'monday',
     totalHours: 10,
     serveTimes: [ { startTime: 5, stopTime: 10 }, { startTime: 15, stopTime: 20 } ]
   },
   {
     day: 'tuesday',
     totalHours: 3,
     serveTimes: [ { startTime: 2, stopTime: 5 } ]
   },
   {
     day: 'wednesday',
     totalHours: 10,
     serveTimes: [ { startTime: 5, stopTime: 15 } ]
   },
   {
     day: 'thursday',
     totalHours: 5,
     serveTimes: [ { startTime: 5, stopTime: 7 }, { startTime: 20, stopTime: 23 } ]
   },
   {
     day: 'friday',
     totalHours: 5,
     serveTimes: [ { startTime: 5, stopTime: 10 } ]
   },
   {
     day: 'saturday',
     totalHours: 10,
     serveTimes: [ { startTime: 5, stopTime: 10 }, { startTime: 13, stopTime: 18 } ]
   }
 ];

 const uniqueDays = new Map(secondArray.map(s => [s.day, s]));
 const result = firstArray.map(({date, day})=> ({date,  ...uniqueDays.get(day)}));
 console.log(result);

关于javascript - 在 JavaScript 中组合对象数组以形成一个新的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60119479/

相关文章:

c# - Asp.Net 尝试获取 ClientID

javascript - jquery 的问题

java将字母转换为数字然后将所有值放入数组

c - 计算偶数或奇数然后将它们相加的 for 循环

arrays - 如何将 ANYARRAY 函数的空数组值转换为 ANYARRAY?

javascript - 如何在父作用域获取静态数据后在子作用域中运行函数

javascript - css/javascript绕圆弧旋转图像

javascript - 如何将curl上传进度发送给ajax显示

c - 如何只从字符串中提取数字?

php - 相交(内连接)两个具有不同键名称的数组