比较两个数组对象数据并在JavaScript中将一个对象合并为一个数组?

时间:2018-09-17 06:47:44

标签: javascript arrays json object

我的数组:

const create = [{"month":"Jan","createCount":"4"},{"month":"Feb","createCount":"5"}];

const close = [{"month":"Jan","closeCount":"3"},{"month":"Feb","closeCount":"5"}];

我需要合并数组对象以比较 month 字段。

我希望我的结果这样...

const data = [{"month":"Jan","createCount":"4","closeCount":"3"},{"month":"Feb","createCount":"5","closeCount":"5"}];

尝试此代码:

const data = [...create, ...close];

但这只是合并两个数组数据。

请给我任何解决方案!

4 个答案:

答案 0 :(得分:3)

您可以使用.map()Object.assign()方法:

const create = [{"month":"Jan","createCount":"4"}, {"month":"Feb","createCount":"5"}],
      close = [{"month":"Jan","closeCount":"3"}, {"month":"Feb","closeCount":"5"}];

const result = create.map(
    o => Object.assign({}, o, close.find(({month}) => month === o.month))
);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:1)

假设create数组中不存在close数组中不存在的条目,反之亦然

尝试使用Array.reduceArray.mapObject.assign

进行关注

const create = [{"month":"Jan","createCount":"4"},{"month":"Feb","createCount":"5"}];

const close = [{"month":"Jan","closeCount":"3"},{"month":"Feb","closeCount":"5"}];

// Create an object with key as month and createCount as value
let obj = create.reduce((a, o) => Object.assign(a, {[o.month]: o.createCount}), {});

// Iterate over close array and add createCount from obj
let result = close.map(o => ({...o, createCount : obj[o.month]}));
console.log(result);

答案 2 :(得分:0)

仅在for

中使用
const create = [{ "month": "Jan", "createCount": "4" }, { "month": "Feb", "createCount": "5" }];
const close = [{ "month": "Jan", "closeCount": "3" }, { "month": "Feb", "closeCount": "5" }];
for (var i in create) {
    var item = create[i];
    item.closeCount = close.find(x => x.month == item.month).closeCount;
}
console.log(create);

答案 3 :(得分:0)

在这里我添加了一些示例,请参考该代码

const create = [{"month":"Jan","createCount":"4"},{"month":"Feb","createCount":"5"}];
const close = [{"month":"Jan","closeCount":"3"},{"month":"Feb","closeCount":"5"}];
console.log(create.length);

    for(var data = 0 ; data < create.length ; data++){ 
    var datas = []
    if(create[data].month == close[data].month){ 
        datas=Object.assign(create[data],close[data]);console.log(create[data]);
    }
}