使用 reduce 函数获取键和值以及键和对象 javascript

Get key and value & key and object with reduce function javascript

我的 API 调用中有以下数据,我正在使用 reduce 函数根据我的要求设置数据。但无法生成,请检查以下代码和所需的输出。还要检查我正在尝试的功能并建议我创建响应的方法。

API 响应:

let cmpRecords =  {
    "status": "success",
    "message": "Record Fetched Successfully",
    "data": [
        {
            "_id": "6098ff60a8e9ee2c7c116d6e",
            "record": {
                "creatorName": "ABC",
                "modifierName": ""
            },
            "is_deleted": "0"
        },
        {
            "_id": "6098ff60a8e9ee2c7c116d6e",
            "record": {
                "creatorName": "ABC",
                "modifierName": ""
            },
            "is_deleted": "0"
        },
        {
            "_id": "6098ff60a8e9ee2c7c116d6z",
            "record": {
                "creatorName": "XYZ",
                "modifierName": ""
            },
            "is_deleted": "0"
        },
        ...
    ]
}

所需输出::

{
    "status": "success",
    "message": "Record Fetched Successfully",
    "data": [
        {
            "name": "ABC",
            "record": [
                {
                    "_id": "6098ff60a8e9ee2c7c116d6e",
                    "record": {
                        "creatorName": "ABC",
                        "modifierName": ""
                    },
                    "is_deleted": "0"
                },
                {
                    "_id": "6098ff60a8e9ee2c7c116d6e",
                    "record": {
                        "creatorName": "ABC",
                        "modifierName": ""
                    },
                    "is_deleted": "0"
                }
            ]
        },
        {
            "name": "XYZ",
            "record": [
                {
                    "_id": "6098ff60a8e9ee2c7c116d6z",
                    "record": {
                        "creatorName": "XYZ",
                        "modifierName": ""
                    },
                    "is_deleted": "0"
                }
            ]
        }
    ]
}

因为我想用键和值以及键和对象来分离同一用户的记录,所以我为此使用了 reduce 函数

group = cmpRecords.reduce((r, a) => {
    let name = a.record.creatorName;
    let record = a;

    r[name] = [...r[name] || [], record];

    return r;
}, {});

此响应为

"data": [
    "ABC":[
        {
            "_id": "6098ff60a8e9ee2c7c116d6e",
            "record": {
                "creatorName": "ABC",
                "modifierName": ""
            },
            "is_deleted": "0"
        },
        ...
    ]
]

我尝试了其他方式,但没有得到所需的回复。

您可以使用 Array.reduce() 按名称对记录进行分组,此处的输出应该是您需要的:

        
const cmpRecords =  { "status": "success", "message": "Record Fetched Successfully", "data": [ { "_id": "6098ff60a8e9ee2c7c116d6e", "record": { "creatorName": "ABC", "modifierName": "" }, "is_deleted": "0" }, { "_id": "6098ff60a8e9ee2c7c116d6e", "record": { "creatorName": "ABC", "modifierName": "" }, "is_deleted": "0" }, { "_id": "6098ff60a8e9ee2c7c116d6z", "record": { "creatorName": "XYZ", "modifierName": "" }, "is_deleted": "0" }, ] }

const output = {
    ...cmpRecords,
    data: Object.values(cmpRecords.data.reduce((acc, cur) => { 
        acc[cur.record.creatorName] = acc[cur.record.creatorName] || { name: cur.record.creatorName, record: [] };
        acc[cur.record.creatorName].record.push(cur);
        return acc;
    }, {}))
}

console.log('Output:', output)