提问人:Spawnet 提问时间:10/26/2023 最后编辑:Spawnet 更新时间:10/26/2023 访问量:62
比较具有相同对象结构的两个不同数组 [已关闭]
Compare two different arrays with same objects structure [closed]
问:
只有一个问题 - 将数组与对象进行比较。 这是初始数组
[
{
"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。
答:
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 必须是数字。我把绳子放在那里,这是错误的。
评论