如何使用lodash与自定义时间戳属性合并

时间:2018-04-20 14:14:17

标签: javascript lodash

我正在尝试将两个对象合并在一起,并且我希望具有两个时间戳中较高者的属性成为获胜者。这是可能的还是我应该使用不同的功能?请注意,此对象包含用户首选项,并且可以包含无限数量的属性。

以下是我想要与期望的结果合并的内容。

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);

1 个答案:

答案 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;
});