我如何用另一个 map2 覆盖 map1,留下 Dart 的 map2 中不可用的键?

How can i override a map1 with another map2 leaving the key which is not available in the map2 in Dart?

我是 flutter/dart 的新手,只有当它们之间存在键匹配时,我才必须用另一张地图替换一张地图,否则请保持第一张地图不变。 这应该像 PHP.

中的 array_replace_recursive() 函数一样工作

这是代码示例:

map1 = {
  "t":{
    "l":{
      "-2":{
        "n":"rocky",
        "e":"rohit@gmail.com",
        "r":"23567"
      }
    },
    "o":{
      "xyz":{
        "p":"hi",
        "x":"cdcbcbk"
      }
    }
  },
  "lang":{
    "eng":"english",
    "spn":"spanish"
  }
  "sc":{
    "math"{
      "lb":"30",
      "pr":"60"
    }
  }
}

我必须用

覆盖它
map2 = {
  "t":{
    "l":{
      "-2":{
        "n":"rohit",
      }
    },
  },
}

预期输出应该是

finalMap = {
      "t":{
        "l":{
          "-2":{
            "n":"rohit",
            "e":"rohit@gmail.com",
            "r":"23567"
          }
        },
        "o":{
          "xyz":{
            "p":"hi",
            "x":"cdcbcbk"
          }
        }
      },
      "lang":{
        "eng":"english",
        "spn":"spanish"
      }
      "sc":{
        "math"{
          "lb":"30",
          "pr":"60"
        }
      }
    }

谢谢

检查一次,根据您的规格进行更改

   replaceIfSame(Map a,Map b){
       b.keys.forEach((k){
         if(a.containsKey(k)){
           if(a[k] is Map && b[k] is Map){
             replaceIfSame(a[k],b[k]);
           }
           else{
             a[k] = b[k];
             }
           }
     });
   }

这里 replaceIfSame 是我调用的函数,递归传递地图作为输入。

如果不是这种情况请说明。

干杯!!

我试过下面的方法也给出了相同的结果,但我不确定它是否有效

Map<dynamic, dynamic> mergemap(Map map1, Map map2) {
      map2.forEach((k, v) {
        if (map1.containsKey(k)) {
          if (v.runtimeType != String) {
            mergemap(map1[k], v);
          } else {
            map1[k] = v;
          }
        }
      });
      return map1;
    }