Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从数组中获取匹配元素并更改数组对象?_Javascript_Arrays_Angular_Typescript - Fatal编程技术网

Javascript 如何从数组中获取匹配元素并更改数组对象?

Javascript 如何从数组中获取匹配元素并更改数组对象?,javascript,arrays,angular,typescript,Javascript,Arrays,Angular,Typescript,若数组有匹配的ID将对象更改为一个对象而不影响原始数组,则使用下面的代码只返回匹配的对象,但我希望得到前面提到的预期结果 梅因酒店 const arr = [{ "body": { "specialtyID": "7114798", "sourceSystem": "HBS", "rxInfos": [{ "drugNdc": "0044

若数组有匹配的ID将对象更改为一个对象而不影响原始数组,则使用下面的代码只返回匹配的对象,但我希望得到前面提到的预期结果

梅因酒店

const arr = [{
            "body": {
                "specialtyID": "7114798",
                "sourceSystem": "HBS",
                "rxInfos": [{
                    "drugNdc": "00445450085",
                    "rxNumber": "14678904"
                }]

            },
            {
                "body": {
                    "specialtyID": "7114798",
                    "sourceSystem": "HBS",
                    "rxInfos": [{
                        "drugNdc": "00004080085",
                        "rxNumber": "1459004"
                    }]
                }
            },
            {
                "body": {
                    "specialtyID": "7908398",
                    "sourceSystem": "HBS",
                    "rxInfos": [{
                        "drugNdc": "06789955085",
                        "rxNumber": "1478604"
                    }]
                }
            }

        ]


        const tempArray = arr;

        function arrayMatch(temp, arr) {
            const finalArray = [];
            arr.forEach((element) => {
                    tempArray.forEach((temp) => {
                            if (temp.speicaltyID === element.specialtyID) {
                                temp.rxInfos.forEach((rxInfo) => {
                                    element.rxInfos.push(rxInfo);
                                });
                            }
                        }
                        finalArray = arr;

                    });
                return finalArray

            }
预期产量

 const arr = [{
                        "body": {
                            "specialtyID": "7114798",
                            "sourceSystem": "HBS",
                            "rxInfos": [{
                                    "drugNdc": "00445450085",
                                    "rxNumber": "14678904"
                                },
                                {
                                    "drugNdc": "00004080085",
                                    "rxNumber": "1459004"
                                }
                            ]
                        },
                        {
                            "body": {
                                "specialtyID": "7908398",
                                "sourceSystem": "HBS",
                                "rxInfos": [{
                                    "drugNdc": "06789955085",
                                    "rxNumber": "1478604"
                                }]
                            }
                        }

                    ]

您可以尝试此方法以获得所需的结果:

const result = arr.reduce((container, value) => {
    const compare     = ({ body }) => body.specialtyID === value.body.specialtyID;
    const isExists    = container.some(compare);
    const pushRxInfos = container.map(item => compare(item) ? item.body.rxInfos.push(...value.body.rxInfos) : item);

    isExists ? pushRxInfos : container.push(value);

    return container;
}, []);

到目前为止,您尝试了什么?@Zze函数仅为匹配对象返回数组这是我正在寻找的解决方案唯一的问题是匹配元素正在另一个嵌套数组下创建,如何将其推送到与对象中的rxInfos元素相同的级别[{matched element}]匹配的元素不应换行array@hussain已经更新了我的答案。只需要使用spread运算符从数组-.push(…value.body.rxInfos)获取原始数据,它现在将是[{element1},{matched element}]