var ningbo_allareas = {
  330203000000: "海曙区",
  330205000000: "江北区",
  330206000000: "北仑区",
  330211000000: "镇海区",
  330212000000: "鄞州区",
  330213000000: "奉化区",
  330225000000: "象山县",
  330226000000: "宁海县",
  330281000000: "余姚市",
  330201000000: "宁波市本级",
  330283000000: "国家高新区",
  330284000000: "前湾新区",
  330282000000: "慈溪市",
  330285000000: "梅山物流产业集聚区",
  330287000000: "大榭开发区",
  330288000000: "东钱湖",
  dbxc: "东部新城",
}

// Production steps of ECMA-262, Edition 5, 15.4.4.19
// Reference: http://es5.github.io/#x15.4.4.19
if (!Array.prototype.map) {
  Array.prototype.map = function (callback, thisArg) {
    var T, A, k

    if (this == null) {
      throw new TypeError(" this is null or not defined")
    }

    // 1. Let O be the result of calling ToObject passing the |this|
    //    value as the argument.
    var O = Object(this)

    // 2. Let lenValue be the result of calling the Get internal
    //    method of O with the argument "length".
    // 3. Let len be ToUint32(lenValue).
    var len = O.length >>> 0

    // 4. If IsCallable(callback) is false, throw a TypeError exception.
    // See: http://es5.github.com/#x9.11
    if (typeof callback !== "function") {
      throw new TypeError(callback + " is not a function")
    }

    // 5. If thisArg was supplied, let T be thisArg; else let T be undefined.
    if (arguments.length > 1) {
      T = thisArg
    }

    // 6. Let A be a new array created as if by the expression new Array(len)
    //    where Array is the standard built-in constructor with that name and
    //    len is the value of len.
    A = new Array(len)

    // 7. Let k be 0
    k = 0

    // 8. Repeat, while k < len
    while (k < len) {
      var kValue, mappedValue

      // a. Let Pk be ToString(k).
      //   This is implicit for LHS operands of the in operator
      // b. Let kPresent be the result of calling the HasProperty internal
      //    method of O with argument Pk.
      //   This step can be combined with c
      // c. If kPresent is true, then
      if (k in O) {
        // i. Let kValue be the result of calling the Get internal
        //    method of O with argument Pk.
        kValue = O[k]

        // ii. Let mappedValue be the result of calling the Call internal
        //     method of callback with T as the this value and argument
        //     list containing kValue, k, and O.
        mappedValue = callback.call(T, kValue, k, O)

        // iii. Call the DefineOwnProperty internal method of A with arguments
        // Pk, Property Descriptor
        // { Value: mappedValue,
        //   Writable: true,
        //   Enumerable: true,
        //   Configurable: true },
        // and false.

        // In browsers that support Object.defineProperty, use the following:
        // Object.defineProperty(A, k, {
        //   value: mappedValue,
        //   writable: true,
        //   enumerable: true,
        //   configurable: true
        // });

        // For best browser support, use the following:
        A[k] = mappedValue
      }
      // d. Increase k by 1.
      k++
    }

    // 9. return A
    return A
  }
}

if (!Array.prototype.filter) {
  Array.prototype.filter = function (fun /*, thisArg */) {
    "use strict"
    if (this === void 0 || this === null) throw new TypeError()
    var t = Object(this)
    var len = t.length >>> 0
    if (typeof fun !== "function") throw new TypeError()
    var res = []
    var thisArg = arguments.length >= 2 ? arguments[1] : void 0
    for (var i = 0; i < len; i++) {
      if (i in t) {
        var val = t[i]
        if (fun.call(thisArg, val, i, t)) res.push(val)
      }
    }
    return res
  }
}

// Production steps of ECMA-262, Edition 5, 15.4.4.18
// Reference: http://es5.github.io/#x15.4.4.18
if (!Array.prototype.forEach) {
  Array.prototype.forEach = function (fun /*, thisp*/) {
    var len = this.length
    if (typeof fun != "function") throw new TypeError()
    var thisp = arguments[1]
    for (var i = 0; i < len; i++) {
      if (i in this) fun.call(thisp, this[i], i, this)
    }
  }
}

// Production steps of ECMA-262, Edition 5, 15.4.4.19
// Reference: http://es5.github.io/#x15.4.4.19
if (!Array.prototype.map) {
  Array.prototype.map = function (callback, thisArg) {
    var T, A, k

    if (this == null) {
      throw new TypeError(" this is null or not defined")
    }

    // 1. Let O be the result of calling ToObject passing the |this|
    //    value as the argument.
    var O = Object(this)

    // 2. Let lenValue be the result of calling the Get internal
    //    method of O with the argument "length".
    // 3. Let len be ToUint32(lenValue).
    var len = O.length >>> 0

    // 4. If IsCallable(callback) is false, throw a TypeError exception.
    // See: http://es5.github.com/#x9.11
    if (typeof callback !== "function") {
      throw new TypeError(callback + " is not a function")
    }

    // 5. If thisArg was supplied, let T be thisArg; else let T be undefined.
    if (arguments.length > 1) {
      T = thisArg
    }

    // 6. Let A be a new array created as if by the expression new Array(len)
    //    where Array is the standard built-in constructor with that name and
    //    len is the value of len.
    A = new Array(len)

    // 7. Let k be 0
    k = 0

    // 8. Repeat, while k < len
    while (k < len) {
      var kValue, mappedValue

      // a. Let Pk be ToString(k).
      //   This is implicit for LHS operands of the in operator
      // b. Let kPresent be the result of calling the HasProperty internal
      //    method of O with argument Pk.
      //   This step can be combined with c
      // c. If kPresent is true, then
      if (k in O) {
        // i. Let kValue be the result of calling the Get internal
        //    method of O with argument Pk.
        kValue = O[k]

        // ii. Let mappedValue be the result of calling the Call internal
        //     method of callback with T as the this value and argument
        //     list containing kValue, k, and O.
        mappedValue = callback.call(T, kValue, k, O)

        // iii. Call the DefineOwnProperty internal method of A with arguments
        // Pk, Property Descriptor
        // { Value: mappedValue,
        //   Writable: true,
        //   Enumerable: true,
        //   Configurable: true },
        // and false.

        // In browsers that support Object.defineProperty, use the following:
        // Object.defineProperty(A, k, {
        //   value: mappedValue,
        //   writable: true,
        //   enumerable: true,
        //   configurable: true
        // });

        // For best browser support, use the following:
        A[k] = mappedValue
      }
      // d. Increase k by 1.
      k++
    }

    // 9. return A
    return A
  }
}
function countTotal(arr, keyName) {
  let $total = 0
  $total = arr.reduce(function (total, currentValue, currentIndex, arr) {
    return currentValue[keyName]
      ? parseFloat(total) + parseFloat(currentValue[keyName])
      : parseFloat(total)
  }, 0)
  return $total
}
function unique(arr1) {
  // const res = new Map();
  // // return arr1.filter((a) => !res.has(a.areaCode) && res.set(a.areaCode, 1))
  // return arr1;
  var hash = {}
  var Arr = arr1.reduce(function (arr, current) {
    hash[current.areaCode]
      ? ""
      : (hash[current.areaCode] = true && arr.push(current))
    return arr
  }, [])
  return Arr
}


function  accAdd(arg1, arg2) {
  var r1, r2, m, c;
  try {
      r1 = arg1.toString().split(".")[1].length
  } catch (e) {
      r1 = 0
  }
  try {
      r2 = arg2.toString().split(".")[1].length
  } catch (e) {
      r2 = 0
  }
  c = Math.abs(r1 - r2);
  m = Math.pow(10, Math.max(r1, r2))
  if (c > 0) {
      var cm = Math.pow(10, c);
      if (r1 > r2) {
          arg1 = Number(arg1.toString().replace(".", ""));
          arg2 = Number(arg2.toString().replace(".", "")) * cm;
      }
      else {
          arg1 = Number(arg1.toString().replace(".", "")) * cm;
          arg2 = Number(arg2.toString().replace(".", ""));
      }
  }
  else {
      arg1 = Number(arg1.toString().replace(".", ""));
      arg2 = Number(arg2.toString().replace(".", ""));
  }
  return (arg1 + arg2) / m
}
