更好的方法是基于相同的 id 将对象数组推送到对象数组?

better way push array of an object to array of an object based on the same id?

嗨,我想将一个对象数组推送到一个对象数组,这样新的 属性 将推送到基于相同 _id 的对象数组 这是原始数据:

const data =[
             { 
              foo:foo1,
              data:{
                   _id:"a1",
                   man:2
                  }
            },
            { 
              foo:foo1,
              data:{
                   _id:"a1",
                   man:2
                }
             }
           ]

这是我要放在我的原始数据上的数据

const d = [{
             _id:"a1",
             women:4,
           }]

所需的输出是:

      const data =[
             { 
              foo:foo1,
              data:{
                   _id:"a1",
                   man:2,
                   women:4
                  }
            },
            { 
              foo:foo1,
              data:{
                   _id:"a1",
                   man:2,
                   women:4
                }
             }
           ]

我觉得可以用for循环检查_id是否相同,然后推送给对象,但是有没有更好的方法呢?或使用 lodash?任何的想法?提前致谢

你可以试试这个!

const d = [{
             _id:"a1",
             women:4,
           }
           ]
    
const data =[
             { 
              foo:"foo1",
              data:{
                   _id:"a1",
                   man:2
                  }
            },
            { 
              foo:"foo1",
              data:{
                   _id:"a1",
                   man:2
                }
             }
           ]    
var arr = data.map(function(obj, i){
    d.map(function(o,i){
    if(obj.data._id == o._id)
    {
        obj.data.women = o.women;
    }
    });
    return obj;
});

console.log(arr);

使用您拥有的数据结构,您可以遍历两者并使用相同的 id 简单地更新条目。也就是说,这是一个具有 O(n^2) 时间复杂度的蛮力解决方案。此解决方案还 returns 一个新对象而不是改变原始对象。

// Existing entries
const entries = [
    {
        data: {
            id: 'a1',
            man: 2
        }
    },
    {
        data: {
            id: 'a1',
            man: 2
        }
    },
];

// Data with same id to update
const updates = [
    {
        id: 'a1',
        women: 4
    },
];

/**
 * Update properties for an existing entry given
 * a list of partially updated entries
 */
function updateEntries(entriesList, updatesList) {
    // Build up new array as to not mutate
    // the existing data structure
    const newEntries = [];
    for (const entry of entriesList) {
        for (const update of updatesList) {
            // Update when the ids match
            if (entry.data.id === update.id) {
                newEntries.push({
                    data: {
                        ...entry.data,
                        ...update
                    }
                });
            } else {
                newEntries.push(entry);
            }
        }
    }
    return newEntries;
}

const newEntries = updateEntries(entries, updates);
// newEntries = [
//     {
//         data: {
//             id: 'a1',
//             man: 2,
//             women: 4
//         }
//     },
//     {
//         data: {
//             id: 'a1',
//             man: 2,
//             women: 4
//         }
//     },
// ];

如果您将 entries 的数据结构更改为并反对由 id 组织的每个 entry 假设它们实际上应该是唯一的,您可以获得 O(n)基于 updates.

// Entries by id
const entries = {
    a1: {
        man: 2
    },
    a2: {
        man: 2
    },
};