typescript 如何使用javascrypt替换json对象中的Json数组,并根据匹配的id放置另一个数组,我的项目是react typescrypt

vptzau2j  于 2022-11-18  发布在  TypeScript
关注(0)|答案(1)|浏览(101)

我有JSON本身

[
    {
        "id": 0,
        "traps": [
            {
                "size": "big",
                "for": "none",
                "amount": 8
            },
            {
                "size": "large",
                "for": "spa",
                "amount": 4
            }
        ]
    },
    {
        "id": 1,
        "traps": {
            "traps": {
                "children": [
                    {
                        "trap": {
                            "children": [
                                {
                                    "size": {
                                        "content": "regular"
                                    }
                                },
                                {
                                    "for": {
                                        "content": "none"
                                    }
                                },
                                {
                                    "amount": {
                                        "content": "10"
                                    }
                                }
                            ]
                        }
                    },
                    {
                        "trap": {
                            "children": [
                                {
                                    "size": {
                                        "content": "regular"
                                    }
                                },
                                {
                                    "for": {
                                        "content": "spa"
                                    }
                                },
                                {
                                    "for": {
                                        "content": "2"
                                    }
                                }
                            ]
                        }
                    }
                ]
            }
        }
    }
]

我想把它的traps元素替换为与此列表匹配的元素

[
    [
        {
            "id": 0,
            "trap": [
                {
                    "size": "regular",
                    "for": "Si",
                    "amount": 4
                }
            ]
        }
    ],
    [
        {
            "id": 1,
            "trap": [
                {
                    "size": "ad",
                    "for": "dad",
                    "amount": "0"
                }
            ]
        }
    ],
    [
        {
            "id": 1,
            "trap": [
                {
                    "size": "ran",
                    "for": "sultan",
                    "amount": "2"
                }
            ]
        }
    ],
]

这意味着我想丢弃第一个文档中的陷阱,并放置第二个文档中的陷阱。我需要的解决方案是id = 0的元素放弃其陷阱值,并使用第二个Json中id=0的陷阱值。此外,第一个文档中ID为1的元素需要丢弃其陷阱元素,并替换为第二个文档中ID为1的其他两个陷阱元素。
非常感谢您的光临。
我尝试用second的值更新第一个,但第一个文档中的每个元素都从第二个文档中获取了全部3个陷阱,或者根本没有陷阱

4c8rllxm

4c8rllxm1#

假设JSON的第一个块名为start,JSON的第二个块名为update,那么根据我对问题的阅读,下面的代码将起到作用:

const trapById = update.flat(1).reduce((acc, val) => {
  const { id, trap } = val;
  if (!acc[id]) {
    return { ...acc, [id]: trap };
  } else {
    return { ...acc, [id]: [...acc[id], ...trap] };
  }
}, {});

const newData = start.map(({ id }) => ({ id, trap: trapById[id] }));

reduce调用生成一个对象,其中键是id,值是trap数组的新值。然后map调用从起始数据创建一个新数组,用新的字段替换旧的trap字段。希望这能有所帮助。

相关问题