From ad647fd69b7577aa2ae567b74bcd3bba89c51118 Mon Sep 17 00:00:00 2001
From: jaymeans <monkeydzeke@protonmail.com>
Date: Thu, 20 Sep 2018 21:18:26 -0700
Subject: [PATCH] Changed to use Object.prototype.toString instead of
 instanceOf for determining arrayness

---
 papaparse.js | 25 +++++++++++++++----------
 1 file changed, 15 insertions(+), 10 deletions(-)

diff --git a/papaparse.js b/papaparse.js
index 059ccbb..a945358 100755
--- a/papaparse.js
+++ b/papaparse.js
@@ -290,9 +290,9 @@
 		if (typeof _input === 'string')
 			_input = JSON.parse(_input);
 
-		if (_input instanceof Array)
+		if (isArray(_input))
 		{
-			if (!_input.length || _input[0] instanceof Array)
+			if (!_input.length || isArray(_input[0]))
 				return serialize(null, _input, _skipEmptyLines);
 			else if (typeof _input[0] === 'object')
 				return serialize(objectKeys(_input[0]), _input, _skipEmptyLines);
@@ -302,17 +302,17 @@
 			if (typeof _input.data === 'string')
 				_input.data = JSON.parse(_input.data);
 
-			if (_input.data instanceof Array)
+			if (isArray(_input.data))
 			{
 				if (!_input.fields)
 					_input.fields =  _input.meta && _input.meta.fields;
 
 				if (!_input.fields)
-					_input.fields =  _input.data[0] instanceof Array
+					_input.fields =  isArray(_input.data[0])
 						? _input.fields
 						: objectKeys(_input.data[0]);
 
-				if (!(_input.data[0] instanceof Array) && typeof _input.data[0] !== 'object')
+				if (!(isArray(_input.data[0])) && typeof _input.data[0] !== 'object')
 					_input.data = [_input.data];	// handles input like [1,2,3] or ['asdf']
 			}
 
@@ -335,7 +335,7 @@
 			}
 
 			if (typeof _config.quotes === 'boolean'
-				|| _config.quotes instanceof Array)
+				|| isArray(_config.quotes))
 				_quotes = _config.quotes;
 
 			if (typeof _config.skipEmptyLines === 'boolean'
@@ -374,8 +374,8 @@
 			if (typeof data === 'string')
 				data = JSON.parse(data);
 
-			var hasHeader = fields instanceof Array && fields.length > 0;
-			var dataKeyedByField = !(data[0] instanceof Array);
+			var hasHeader = isArray(fields) && fields.length > 0;
+			var dataKeyedByField = !(isArray(data[0]));
 
 			// If there a header row, write it first
 			if (hasHeader && _writeHeader)
@@ -424,7 +424,7 @@
 			str = str.toString().replace(quoteCharRegex, _quoteChar + _quoteChar);
 
 			var needsQuotes = (typeof _quotes === 'boolean' && _quotes)
-							|| (_quotes instanceof Array && _quotes[col])
+							|| (isArray(_quotes) && _quotes[col])
 							|| hasAny(str, Papa.BAD_DELIMITERS)
 							|| str.indexOf(_delimiter) > -1
 							|| str.charAt(0) === ' '
@@ -1778,7 +1778,7 @@
 	{
 		if (typeof obj !== 'object' || obj === null)
 			return obj;
-		var cpy = obj instanceof Array ? [] : {};
+		var cpy = isArray(obj) ? [] : {};
 		for (var key in obj)
 			cpy[key] = copy(obj[key]);
 		return cpy;
@@ -1794,5 +1794,10 @@
 		return typeof func === 'function';
 	}
 
+	function isArray(obj)
+	{
+		return Object.prototype.toString.call(obj) === '[object Array]';
+	}
+
 	return Papa;
 }));