docs: function toCsv(objArray, sDelimiter, cDelimiter) {
      let i, l, names = [], name, value, obj, row, output = "", n, nl;
  
      // Initialize default parameters.
      if (typeof (sDelimiter) === "undefined" || sDelimiter === null) {
          sDelimiter = '"';
      }
      if (typeof (cDelimiter) === "undefined" || cDelimiter === null) {
          cDelimiter = ",";
      }
  
      for (i = 0, l = objArray.length; i < l; i += 1) {
          // Get the names of the properties.
          obj = objArray[i];
          row = "";
          if (i === 0) {
              // Loop through the names
              for (name in obj) {
                  if (obj.hasOwnProperty(name)) {
                      names.push(name);
                      row += [sDelimiter, name, sDelimiter, cDelimiter].join("");
                  }
              }
              row = row.substring(0, row.length - 1);
              output += row;
          }
  
          output += "\n";
          row = "";
          for (n = 0, nl = names.length; n < nl; n += 1) {
              name = names[n];
              value = obj[name];
              if (n > 0) {
                  row += ","
              }
              row += toCsvValue(value, '"');
          }
          output += row;
      }
  
      return output;
  }