deepDifferenceByValue method

Map deepDifferenceByValue(
  1. Map toCompare
)

Returns new instance of Map containing values, which differs in toCompare. Does not work with nested List and Set yet.

According to complement in set theory (for clarity see Venn Diagrams): A - this B - toCompare Difference in values (relative complement): A \ B

Implementation

Map deepDifferenceByValue(Map toCompare) {
  var diff = {};
  forEach((key, value) {
    if (!toCompare.containsKey(key)) {
      diff.addEntries([MapEntry(key, value)]);
    } else if (value is Map && toCompare[key] is Map) {
      var deepDiff = value.deepDifferenceByValue(toCompare[key]);
      if (deepDiff.isNotEmpty) {
        diff.addEntries([MapEntry(key, deepDiff)]);
      }
    } else if (value?.runtimeType != toCompare[key]?.runtimeType ||
        value != toCompare[key]) {
      diff.addEntries([MapEntry(key, value)]);
    }
  });

  return diff;
}