【发布时间】:2019-12-12 15:41:09
【问题描述】:
我有一个问题,我必须制作一开始分成两半的表格,显示左侧和中间的 Id,然后在收到来自 api 请求的数据后,比较这两个数组并将差异标记为红色。实际上它部分工作得很好,所以它映射到 2 个数组,如果它发现任何差异,然后将其涂成红色,问题是它也复制了所有元素,并且在最终表格中多次出现相同的行。我知道这是因为我在另一个映射中映射数组,但我不知道如何解决这个问题。基本思想是:显示所有结果,不重复,并标记差异。我知道如何标记差异,但完全不知道如何不显示重复这里我发布了最小化的代码以便于阅读谢谢!
const applicationsTable = (classes, current, compared) =>
current.configuration.applications.map((el, i) =>
compared &&
compared.configuration.applications.map((comparedEl, i) => (
<TableRow key={i}>
<StyledFiledTableCell>
<Typography variant="body2">
{el.version}
</Typography>
</StyledFiledTableCell>
<StyledFiledTableCell colSpan="5">
<Typography variant="body2">{el.aid}</Typography>
</StyledFiledTableCell>
{el.aid == comparedEl.aid ? (
<>
<StyledFiledTableCell>
<Typography variant="body2">
{comparedEl.version}
</Typography>
</StyledFiledTableCell>
</>
) : (
<StyledFiledTableCell colSpan="5" />
)}
</TableRow>
))
)
在这里我还发布了我的问题的照片,如您所见,表格中的元素是重复的
这里是我比较和当前数据的示例:
const current.configuration.applications = [
{
aid: "E82B0601040181C31F0201",
lifeCycle: "SELECTABLE",
version: null
},
{
aid: "E82B0601040181C31F027F0301",
lifeCycle: "SELECTABLE",
version: null
},
{
aid: "D2760001725041636301",
lifeCycle: "SELECTABLE",
version: null
},
{
aid: "D276000172536F434D01",
lifeCycle: "SELECTABLE",
version: null
},
]
const compared.configuration.applications = [
{
aid: "E82B0601040181C31F0201",
lifeCycle: "SELECTABLE",
version: "03.02"
},
{
aid: "D276000172536F434D01",
lifeCycle: "SELECTABLE",
version: "02.07"
},
]
【问题讨论】:
-
你可以试试lodash
uniq方法 -
嗯,你能举个例子吗?因为我有点不知道如何在我的情况下实现 lodash
-
嗯我不太明白你上面的算法。您是否尝试根据
aid值找出两个数组之间的差异,并将它们显示在表格上? -
我的问题是,我有两个数组,我从两个不同的 api 响应中获得。第一个命名为 current,另一个命名为 compare。我希望循环并将它们显示在如上所示的表格中。长号是辅助,左边我想显示当前版本,右边我想显示比较的版本。 (如果它为空,那么我不显示它)无论如何你可以在双循环后看到,带辅助的行被重复,我希望摆脱任何重复的行
-
啊。所以你想将
version从另一个数组映射到左数组?让我重新表述一下您的意图:您想在表格左侧显示current列表,并在右侧从compared列表中找到version值,对吗?