我试图将两个对象合并在一起,但是有可能存在X个重复项目。 作为一个例子,我已经有historyExisting,我想添加historyNew到它。你可以看到有重复
示例数据
var historyExisting = {
'1505845390000': 295426,
'1505757979000': 4115911,
'1505677767000': 4033384,
'1505675472000': 4033384,
'1505591090000': 3943956
}
var historyNew = {
'1505675472000': 4033384,
'1505591090000': 3943956,
'1505502071000': 3848963,
'1505499910000': 3848963,
'1505499894000': 3848963
}
期望的结果
var history = {
'1505845390000': 295426,
'1505757979000': 4115911,
'1505677767000': 4033384,
'1505675472000': 4033384,
'1505591090000': 3943956,
'1505502071000': 3848963,
'1505499910000': 3848963,
'1505499894000': 3848963
}
如您所见,结果仍按时间戳顺序保留,但任何重复都已删除。 我一直在尝试获取historyExisting中的最后一项key / value,在historyNew中找到它之前删除任何项目然后合并它们但它看起来非常笨重。
这是Node中的服务器端,因此不依赖于浏览器。
有什么建议吗?
答案 0 :(得分:3)
(在Node.js 4及更高版本中支持)
var historyExisting = {
'1505845390000': 295426,
'1505757979000': 4115911,
'1505677767000': 4033384,
'1505675472000': 4033384,
'1505591090000': 3943956
}
var historyNew = {
'1505675472000': 4033384,
'1505591090000': 3943956,
'1505502071000': 3848963,
'1505499910000': 3848963,
'1505499894000': 3848963
}
var merged = Object.assign({}, historyExisting, historyNew);
console.log(merged);
如果您需要支持不支持Object.assign的浏览器(或环境),您可能已经在您的工具库中提供了一个工具,例如 jQuery的扩展,或 lodash的扩展和许多其他polyfill。如果您无法访问此类工具,则可以随时编写自己的工具:
function extend(base, ...objs) {
objs.forEach(obj => {
Object.keys(obj).forEach(key => {
base[key] = obj[key];
})
});
return base;
}
var historyExisting = {
'1505845390000': 295426,
'1505757979000': 4115911,
'1505677767000': 4033384,
'1505675472000': 4033384,
'1505591090000': 3943956
}
var historyNew = {
'1505675472000': 4033384,
'1505591090000': 3943956,
'1505502071000': 3848963,
'1505499910000': 3848963,
'1505499894000': 3848963
}
var merged = extend({}, historyExisting, historyNew);
console.log(merged);
答案 1 :(得分:0)
const history = {...historyExisting, ...historyNew};
与`Object.assign({}几乎完全相同,你必须转换才能在节点或几乎任何浏览器中使用它。