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

当与原始属性进行比较时,如何使用ramda从对象中提取更改的属性

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

    经过讨论。变化。我将保留一个changes对象,只保留R.merge(原始,用户)。但是,我需要能够提取更改的属性及其值,以便在用户配置中可以将该对象合并到用户中。

    例子:

    var original = { name:'test', setting1:1, setting2:2 };
    var toChange = R.clone(original);
    var userConfig {};
    /// edit toChange
    toChange.setting1 = 2;
    /// extract setting1 and value from toChange
    
    R.difference(original,toChange) => should be { setting1:2 };
    /// but this does not work,  no matter what way round i put original 
    /// and toChange, need to extract that change / diff
    
    /// so i can then
    userConfig = R.merge(userConfig, R.difference(original,toChange)); // for example
    1 回复  |  直到 7 年前
        1
  •  0
  •   davethecoder    7 年前

    找到了一种解决方法,以防有人想这样做

    var orig = {a: 1, b: 2, c: 3};
    var edited = R.merge(R.clone(orig),{b:7});
    var user = { d: 4 };
    
    //check if left value == right value
    //if not, return null
    //on merge with
    
    //wrap around reject if null
    
    //wrap around a merge into user
    
    user = R.merge(user, R.reject(R.isNil, 
    R.mergeWith(function(l,r){
      return (R.equals(l,r)) ? null : l;
    },edited,orig)));
    
    console.log(user);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.24.1/ramda.min.js"></script>