代码之家  ›  专栏  ›  技术社区  ›  darkwing

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

  •  0
  • darkwing  · 技术社区  · 7 年前

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

    以下是我试图与期望的结果合并的内容。

    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 回复  |  直到 7 年前
        1
  •  1
  •   rmlan    7 年前

    如果您使用的是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;
    });