比较具有相同对象结构的两个不同数组 [已关闭]

Compare two different arrays with same objects structure [closed]

提问人:Spawnet 提问时间:10/26/2023 最后编辑:Spawnet 更新时间:10/26/2023 访问量:62

问:


想改进这个问题吗?更新问题,使其仅通过编辑这篇文章来关注一个问题。

28天前关闭。

这篇文章在 28 天前被编辑并提交审核,未能重新打开帖子:

原始关闭原因未解决

只有一个问题 - 将数组与对象进行比较。 这是初始数组

[
    {
        "item": {
            "id": '1',
            "path": "some text"
        }
        "active": true
    },
    {
        "item": {
            "id": '2',
            "path": "some text"
        }
        "active": true
    },
    {
        "item": {
            "id": '4',
            "path": "some text"
        }
        "active": false
    },
    {
        "item": {
            "id": '10',
            "path": "some text"
        }
        "active": false
    }
]

这是包含项的新数组

[
    {
        "id": '1',
        "path": "some text"
    },
    {
        "id": '4',
        "path": "some text"
    }
    ,
    {
        "id": '6',
        "path": "some text"
    }
]

如您所见,初始数组中的“item”与新数组中的对象具有相同的结构,但可能具有不同的 ID。

我需要

  • 仅保留 ID 为 1 和 4 且当前为“活动”的项目;
  • 删除 ID:2
  • 并添加 ID:6

所以这里的结果一定是

[
    {
        "item": {
            "id": '1',
            "path": "some text"
        }
        "active": true
    },
    {
        "item": {
            "id": '4',
            "path": "some text"
        }
        "active": false
    },
    {
        "item": {
            "id": '6',
            "path": "some text"
        }
        "active": false
    },
]

“active” false by defaut,因此对于 6 或任何新项目,它必须是 false。

JavaScript 数组循环 对象

评论

3赞 mykaf 10/26/2023
你尝试过什么,你在哪里被卡住了?
0赞 Spawnet 10/26/2023
我尝试将两个过滤器组合在一起,但只能找到新对象。这里只有 id 6。如何删除 2 和 10?如何获得最终结果?
0赞 mykaf 10/26/2023
请问您如何尝试组合两个过滤器。
0赞 Spawnet 10/26/2023
我正在过滤新数组,在里面我正在过滤旧数组。因此,我将每个新对象与每个旧对象进行比较。
1赞 mplungjan 10/26/2023
请访问帮助中心浏览以查看内容和如何询问。做一些研究,搜索SO上的相关主题;如果您遇到困难,请发布一个最小的可重现示例,注明输入和预期输出,最好是在 Stacksnippet

答:

1赞 Nina Scholz 10/26/2023 #1

您可以收集所有 id 并映射新对象。

const
    oldItems = [{ item: { id: '1', path: "some text" }, active: true }, { item: { id: '2', path: "some text" }, active: true }, { item: { id: '4', path: "some text" }, active: false }, { item: { id: '10', path: "some text" }, active: false }],
    newItems = [{ id: '1', path: "some text" }, { id: '4', path: "some text" }, { id: '6', path: "some text" }],
    ids = new Set(...oldItems.map(({ item: { id } }) => id)),
    result = newItems.map(item => ({ item, active: ids.has(item.id) }));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

评论

0赞 Spawnet 10/26/2023
我的错,我可以要求将其更改为ts吗?
0赞 Nina Scholz 10/26/2023
对不起,我不知道TS
0赞 Spawnet 10/26/2023
好的,但是我的另一个错误 - id 是一个数字。如果我将您的代码 ID 更改为数字,则会出现错误。
0赞 Nina Scholz 10/26/2023
以上只是字符串......
0赞 Spawnet 10/26/2023
可以,但 id 必须是数字。我把绳子放在那里,这是错误的。