【问题标题】:How to use lodash's merge with a custom timestamp property如何使用 lodash 的合并与自定义时间戳属性
【发布时间】:2018-10-01 07:00:42
【问题描述】:

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

这是我试图与预期结果合并的内容。

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

【问题讨论】:

  • 检查时间戳并让它决定合并函数调用的参数顺序。
  • 对象是动态的“用户偏好”,包含无限数量的属性。
  • 我不确定你的意思。你能提供更多信息吗?什么是合并的样本输入,期望的输出是什么?你能展示你到目前为止的实际代码吗?
  • 请参阅编辑。这有帮助吗?

标签: javascript lodash


【解决方案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;
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-12
    • 1970-01-01
    • 2016-12-31
    • 2014-08-10
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多