docs: function merge(arr1, arr2, arr3, m1, m2) {
        return _m(arr1, _m(arr2, arr3, m2), m1) || [];
  
        function _m(a1, a2, m) {
          if (!m) return a1 || a2;
          switch (m) {
          case 'pre':
          default:
            return _mg(a1, a2);
          case 'post':
            return _mg(a2, a1);
          }
        }
        function _mg(a, name_a) {
          var names = [];
          var ret = [];
          for (var i in name_a) {
            ret.push(name_a[i]);
            names.push(name_a[i]._name);
          }
          for (var i in a) {
            if (names.indexOf(a[i]._name) < 0) {
              ret.push(a[i]);
            }
          }
          return ret;
        }
      }