我希望通过按天匹配 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/