gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:37:06 24 4
gpt4 key购买 nike

我希望通过按天匹配它们并生成一个新的对象数组来将 2 个对象数组合并为 1 个,而不是包含来自原始 2 的相关数据。目前我有这些 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com