合并两个动态对象数组:将两个动态对象数组合并为一个
P粉903969231
P粉903969231 2023-08-18 14:53:48
[JavaScript讨论组]

我有两个对象的动态数组,如下所示(这是一个包含n个对象的动态数组):

serverArray = [
    {"id":"field1","mandatory":false,"visible":false},
    {"id":"field2","mandatory":false,"visible":false},
    {"id":"field3","mandatory":false,"visible":false},
    {"id":"field4","mandatory":false,"visible":false}
]

localArray = [
    {"id":"field1"},
    {"id":"field2","mandatory":false},
    {"id":"field3","mandatory":true,"visible":false},
    {"id":"field4","mandatory":false,"visible":true},
    {"id":"field5","mandatory":false,"visible":true},
    {"id":"field6","mandatory":true,"visible":false},
]

我将这两个数组合并为具有相同ID的对象,如下所示:

for (let x = 0; x < serverArray.length; x++) {
    for (let y = 0; y < localArray.length; y++) {
        if (serverArray[x].id == localArray[y].id) { // serverArray[x].id/localArray[y].id = 'field1', 'field2'
            for (let key in localArray[y]) { //key = 'id', 'mandatory', etc
                serverArray[x][key] = localArray[y].hasOwnProperty(key) ? localArray[y][key] : serverArray[x][key]; //Override with local field attribute value (if present) in final returned response
            }
        }
    }
}

然而,我还希望在最终的serverArray中包含那些不在serverArray中的ID(即上面示例中的field5field6),并且这些字段也会失败上述条件(即serverArray[x].id == localArray[y].id),我希望这些字段也作为最终serverArray的一部分,即在我的最终serverArray中还应包含以下两个对象:

{"id":"field5","mandatory":false,"visible":true},
{"id":"field6","mandatory":true,"visible":false},

有没有办法实现这个要求?

P粉903969231
P粉903969231

全部回复(1)
P粉330232096

在循环遍历两个数组时,您可以创建一个新对象来跟踪合并的字段。在初始合并之后,您可以再次遍历localArray,以识别尚未合并到serverArray中的字段,并将它们添加到合并结果中。

let mergedFields = {};

// 根据共同的ID进行初始合并
for (let y = 0; y < localArray.length; y++) {
    const localField = localArray[y];
    const serverField = serverArray.find(field => field.id === localField.id);

    if (serverField) {
        mergedFields[localField.id] = {
            ...serverField,
            ...localField
        };
    } else {
        mergedFields[localField.id] = localField;
    }
}

// 添加在mergedFields中不存在的剩余localArray字段
for (let y = 0; y < localArray.length; y++) {
    const localField = localArray[y];
    if (!mergedFields.hasOwnProperty(localField.id)) {
        mergedFields[localField.id] = localField;
    }
}

// 将mergedFields对象转换回数组
const mergedServerArray = Object.values(mergedFields);

console.log(mergedServerArray);
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号