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

更新具有匹配属性的对象并忽略新属性

  •  5
  • Maryannah  · 技术社区  · 7 年前

    我正在使用typescript,我想用另一个对象更新一个对象,只更新匹配的键。

    // Destination
    objectOne = {
      a: 0,
      b: 0,
    };
    
    // Source
    objectTwo = {
      a: 1,
      b: 1,
      c: 1,
    };
    
    // Expected
    result = {
      a: 1,
      b: 1,
    };
    
    // Current solution
    const current = {};
    Object.keys(objectTwo).forEach(key => key in objectOne ? current[key] = objectTwo[key] : null);
    
    console.log(current);

    有单程航班吗 (即,不是迭代键的自定义函数) 那会忽略财产 c 在源头上?我还希望避免使用像lodash或jquery这样的库。

    重复编辑 我的问题不是要合并两个对象,而是忽略第二个对象中的字段,而不是第一个对象中的字段。

    3 回复  |  直到 7 年前
        1
  •  2
  •   Maryannah    7 年前

    一段时间没有答案,似乎最短的解决办法就是我自己提供的:

    Object.keys(newObj).forEach(key => key in oldObj? result[key] = newObj[key] : null)
    
        2
  •  0
  •   Reuven Chacha    7 年前
    const result = Object.keys(objectOne)
        .reduce((init, key) => Object.assign(init, {[key]: objectTwo[key]}) , {});
    
        3
  •  0
  •   Leonid Pyrlia    7 年前

    我认为没有内置函数来完成您所需要的,而不是通过迭代第一个对象的键和第二个对象的值来实现自定义函数:

    const objectOne = {
      a: 0,
      b: 0
    };
    
    const objectTwo = {
      a: 1,
      b: 1,
      c: 1,
    };
    
    const result = Object.keys(objectOne).reduce((all, key) => {
    
        all[key] = objectTwo[key] || objectOne[key];
    
        return all;
    
    },{});
    
    console.log(result);