如何将这两张地图合并为一张

时间:2020-03-12 07:57:19

标签: javascript ecmascript-6

我正在尝试将这两张地图合并为一张地图。我试图使用concat,但是不起作用。并且还尝试了var m = {... v1,... v2};但这也不起作用。所以任何人都知道请帮助我。

这是我的两张地图:

var v1 = {Sdata: [{id: '1', name: 'Mark'},{id: '3', name: 'venu'}]};
var v2 = {Sdata: [{id: '2', name: 'Julee'},{id: '4', name: 'gopi'}]};

在这里我除了输出如下 如果密钥匹配,则应这样合并

result: Sdata: [{id: '1', name: 'Mark'},{id: '3', name: 'venu'}, {id: '2', name: 'Julee'},{id: '4', name: 'gopi'}]};

5 个答案:

答案 0 :(得分:2)

只需使用动态方法将所有项目放在一个数组中即可。

var v1 = { Sdata: [{ id: '1', name: 'Mark' }, { id: '3', name: 'venu' }] },
    v2 = { Sdata: [{ id: '2', name: 'Julee' }, { id: '4', name: 'gopi' }] },
    merged = [v1, v2].reduce((a, b) => {
        Object.entries(b).forEach(([k, v]) => {
            if (!a[k]) a[k] = [];
            a[k].push(...b[k]);
        });
        return a;
    }, {});

console.log(merged);

答案 1 :(得分:1)

const result = {
  Sdata: [...new Set(Object.values(v1).concat(Object.values(v2)))]
};

Set仅用于从数组中删除重复项。

答案 2 :(得分:1)

var v1 = {Sdata: [{id: '1', name: 'Mark'},{id: '3', name: 'venu'}]};
var v2 = {Sdata: [{id: '2', name: 'Julee'},{id: '4', name: 'gopi'}]};

var res = {Sdata: v1['Sdata'].concat(v2['Sdata'])};
console.log(res)

答案 3 :(得分:0)

您可以尝试以下方法:

let v1 = {Sdata: [{id: '1', name: 'Mark'},{id: '3', name: 'venu'}]};
let v2 = {Sdata: [{id: '2', name: 'Julee'},{id: '4', name: 'gopi'}]};

let entries = Object.entries(v1).concat(Object.entries(v2));
let result = entries.reduce((acc, currentValue) => {
    if(!acc.hasOwnProperty(currentValue[0])){
        acc[currentValue[0]] = [];
    }
    acc[currentValue[0]].push(...currentValue[1]);
    return acc;
}, {});

答案 4 :(得分:0)

尝试

{ Sdata: [...v1.Sdata, ...v2.Sdata] }

spread运算符的最好之处在于它易于获得所需结果而无需更改实际数据。

相关问题