gpt4 book ai didi

javascript - 合并和比较

转载 作者:太空宇宙 更新时间:2023-11-04 01:45:33 25 4
gpt4 key购买 nike

我编写了一个逻辑来合并 message2 变量中的所有批处理。如果有重复的批处理名称(AA、BB),它将合并所有批处理并计算行数。

var message2 = {
Batches: [
{Batch: "AA", Lines: 1 },
{Batch: "BB", Lines: 2 },
{Batch: "BB", Lines: 6 }
]
}

成为:

[ { Batch: 'AA', Lines: 1 }, { Batch: 'BB', Lines: 8 } ]

这是通过reduce()方法完成的。

forEach循环中,它循环所有mergedBatches(合并后)并与Worker变量中的批处理进行比较。如果 Worker 行多于 mergedBatches 行,则需要找到相同的批处理名称,然后设置 mergedBatches 以匹配 Worker 行。

var message2 = {
Batches: [
{Batch: "AA", Lines: 1 },
{Batch: "BB", Lines: 2 },
{Batch: "BB", Lines: 6 }
]
}

var Worker = {
Batches: [
{Batch: "AA", Lines: 2 },
{Batch: "BB", Lines: 3 },
]
}

var mergedBatches = message2.Batches.reduce((acc, obj)=>{
var existObj = acc.find(b => b.Batch === obj.Batch);

if(existObj) {
existObj.Lines += obj.Lines;
return acc;
}

acc.push({Batch: obj.Batch, Lines: obj.Lines});
return acc;
},[]);

mergedBatches.forEach((b) => {
var workerBatch = Worker.Batches.find(wB => wB.Batch === b.Batch);
if (b.Lines >= workerBatch.Lines) {
b.Lines = workerBatch.Lines;
}
});


console.log(mergedBatches)

最终结果按预期工作:

[ { Batch: 'AA', Lines: 1 }, { Batch: 'BB', Lines: 3 } ]

有没有办法重构此代码以使其可读或更好的方法?

最佳答案

这是一个较短的版本:

  1. 如果 mergedBatches 不应包含对 message2.Batches 条目的引用,您可以使用解构:acc.push({ ...cur });
  2. 单行 if/else 没有括号应该更具可读性;
  3. 最新条件下的空检查:find 可以返回 undefined。
<小时/>

const message2 = {
Batches: [
{Batch: "AA", Lines: 1 },
{Batch: "BB", Lines: 2 },
{Batch: "BB", Lines: 6 }
]
}

const Worker = {
Batches: [
{Batch: "AA", Lines: 2 },
{Batch: "BB", Lines: 3 },
]
}

const mergedBatches = message2.Batches.reduce((acc, cur) => {
const prev = acc.find(x => x.Batch === cur.Batch)

if (prev) prev.Lines += cur.Lines
else acc.push(cur)

return acc
}, [])

mergedBatches.forEach((mb) => {
const wb = Worker.Batches.find(x => x.Batch === mb.Batch)

if (wb && wb.Lines < mb.Lines ) mb.Lines = wb.Lines
})

console.log(mergedBatches)

关于javascript - 合并和比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51642541/

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