javascript - 如果它们具有相同的键,我如何合并对象值?
问题描述
我有一个充满交易的数组,我想按天划分它。这将是一个日期数组和交易数组。它可能有点乱,但我想返回这个结构。
我尝试做的事情返回了我想要的结构,但我不知道如何合并重复的键值。
这是数组
const transactions = [
{
name: "Salário",
receiveDate: "2020-05-12T00:00:00.000Z",
value: "1000",
},
{
name: "Pagamento ",
receiveDate: "2020-05-12T00:00:00.000Z",
value: "2350",
},
{
name: "Passagem no VEM",
paidDate: "2020-05-02T00:00:00.000Z",
value: "130",
},
{
name: "Almoço",
paidDate: "2020-05-08T00:00:00.000Z",
value: "50",
},
];
这是我现在已经尝试过的
const days = [];
const finalArray = [];
for (let i = 0; i < transactions.length; i++) {
transactions[i].day = transactions[i].receiveDate || transactions[i].paidDate;
days.push(transactions[i].day);
}
const datesToMatch = [...new Set(days)].map((date) => {
return { [date]: null };
});
transactions.map((transaction) => {
datesToMatch.map((dayObject) => {
const day = Object.keys(dayObject).toString();
if (day === transaction.day) {
finalArray.push({ [day]: [transaction] });
}
});
});
输出
[ { '2020-05-12T00:00:00.000Z': [ [Object] ] },
{ '2020-05-12T00:00:00.000Z': [ [Object] ] },
{ '2020-05-02T00:00:00.000Z': [ [Object] ] },
{ '2020-05-08T00:00:00.000Z': [ [Object] ] } ]
预期产出
[ { '2020-05-12T00:00:00.000Z': [ [Object, Object] ] },
{ '2020-05-02T00:00:00.000Z': [ [Object] ] },
{ '2020-05-08T00:00:00.000Z': [ [Object] ] } ]
谢谢!
解决方案
解释:
dates
: 从两个字段中提取日期uniqueDates
:构建一个 Set 并将其转换为一个数组,因此它只有 uniqueDatesdateToTransactions
:将每个唯一日期映射到具有一个键(本身)的对象,并过滤与其相等的每个事务。
const transactions = [{
name: "Salário",
receiveDate: "2020-05-12T00:00:00.000Z",
value: "1000",
},
{
name: "Pagamento ",
receiveDate: "2020-05-12T00:00:00.000Z",
value: "2350",
},
{
name: "Passagem no VEM",
paidDate: "2020-05-02T00:00:00.000Z",
value: "130",
},
{
name: "Almoço",
paidDate: "2020-05-08T00:00:00.000Z",
value: "50",
},
];
const dates = transactions.map(x => {
const received = x.receiveDate || [];
const paid = x.paidDate || [];
return received + paid;
});
const uniqueDates = [...new Set(dates)];
const dateToTransactions =
uniqueDates.map(
date => {
sameDate = transactions.filter(x => x.receiveDate === date || x.paidDate == date);
return {[date]: sameDate};
});
console.log(dateToTransactions);
推荐阅读
- flutter - video_player 切换视频后显示空白缩略图
- python - 尝试调用函数时 Pyrogram 处理程序不起作用
- python - 包含 pandas 中所有先前值的滚动相关性
- reactjs - 在 React 的功能组件中使用状态
- html - 如何从服务器强制刷新 HTML 页面
- sql - UNION ALL 并用 NULL 填充日期列
- excel - 使用 Excel VBA 在 Word 书签处插入超链接
- flutter - 闪屏中的 Flutter 登录控件
- javascript - 显示输入字段中时间戳的日期,仅使用 IST 结果应在 javascript 中的 p 标记中
- c# - D-Parameter of RSA change depending on how you access the private key of a certificate