我正在尝试将两个对象合并在一起,并且我希望具有两个时间戳中较高者的属性成为获胜者。这是可能的还是我应该使用不同的功能?请注意,此对象包含用户首选项,并且可以包含无限数量的属性。
以下是我想要与期望的结果合并的内容。
let preferences1 = {
'favorite-color': {
timestamp: 1,
data: 'red'
},
'nickname': {
timestamp: 1,
data: 'dude'
}
};
let preferences2 = {
'favorite-color': {
timestamp: 2,
data: 'black'
}
};
let outcome = {
'favorite-color': {
timestamp: 2,
data: 'black'
},
'nickname': {
timestamp: 1,
data: 'dude'
}
};
const result = merge({}, preferences1, preferences2);
答案 0 :(得分:1)
如果你使用lodash 4+,看起来mergeWith
功能在这里会有所帮助。
let preferences1 = {
'favorite-color': {
timestamp: 1,
data: 'red'
},
'nickname': {
timestamp: 1,
data: 'dude'
}
};
let preferences2 = {
'favorite-color': {
timestamp: 2,
data: 'black'
}
};
let outcome = _.mergeWith({}, preferences1, preferences2, function (obj, src) {
if (!obj || !obj.timestamp || !src.timestamp) return undefined;
if (obj.timestamp > src.timestamp) return obj;
return src;
});