function createObjWithHashedKeys (fdObj) {
  if (!isFunction(fdObj.entries)) {
    return fdObj // not a FormData object with iterable
  }
  const newObj = {}
  const hashIdx = "_**[]" // our internal identifier
  const trackKeys = {}
  for (let pair of fdObj.entries()) {
    if (!newObj[pair[0]] && !(trackKeys[pair[0]] && trackKeys[pair[0]].containsMultiple)) {
      newObj[pair[0]] = pair[1] // first key name: no hash required
    } else {
      if (!trackKeys[pair[0]]) {
        // initiate tracking key for multiple
        trackKeys[pair[0]] = {
          containsMultiple: true,
          length: 1
        }
        // "reassign" first pair to matching hashed format for multiple
        let hashedKeyFirst = `${pair[0]}${hashIdx}${trackKeys[pair[0]].length}`
        newObj[hashedKeyFirst] = newObj[pair[0]]
        // remove non-hashed key of multiple
        delete newObj[pair[0]] // first
      }
      trackKeys[pair[0]].length += 1
      let hashedKeyCurrent = `${pair[0]}${hashIdx}${trackKeys[pair[0]].length}`
      newObj[hashedKeyCurrent] = pair[1]
    }
  }
  return newObj
}
Convert a FormData object into plain object
Append a hashIdx and counter to the key name, if multiple exists
if single, key name = <original>
if multiple, key name = <original><hashIdx><count>
@example <caption>single entry for vegetable</caption>
fdObj.entries.vegtables: "carrot"
// returns newObj.vegetables : "carrot"
@example <caption>multiple entries for fruits[]</caption>
fdObj.entries.fruits[]: "apple"
// returns newObj.fruits[]_**[]1 : "apple"
fdObj.entries.fruits[]: "banana"
// returns newObj.fruits[]_**[]2 : "banana"
fdObj.entries.fruits[]: "grape"
// returns newObj.fruits[]_**[]3 : "grape"
@param {FormData} fdObj - a FormData object
@return {Object} - a plain object