I'm trying to write a function that either accepts a list of strings, or a single string. If it's a string, then I want to convert it to an array with just the one item so I can loop over it without fear of an error.
So how do I check if the variable is an array?
function checkIfArrayIsUnique(myArray) { for (var i = 0; i < myArray. length; i++) { for (var j = 0; j < myArray. length; j++) { if (i != j) { if (myArray[i] == myArray[j]) { return true; // means there are duplicate values } } } } return false; // means there are no duplicate values. }
One of the most common ways to find duplicates is by using the brute force method, which compares each element of the array to every other element. This solution has the time complexity of O(n^2) and only exists for academic purposes.
The method given in the ECMAScript standard to find the class of Object is to use the toString
method from Object.prototype
.
if(Object.prototype.toString.call(someVar) === '[object Array]') { alert('Array!'); }
Or you could use typeof
to test if it is a string:
if(typeof someVar === 'string') { someVar = [someVar]; }
Or if you're not concerned about performance, you could just do a concat
to a new empty Array.
someVar = [].concat(someVar);
There's also the constructor which you can query directly:
if (somevar.constructor.name == "Array") { // do something }
Check out a thorough treatment from T.J. Crowder's blog, as posted in his comment below.
Check out this benchmark to get an idea which method performs better: http://jsben.ch/#/QgYAV
From @Bharath, convert a string to an array using ES6 for the question asked:
const convertStringToArray = (object) => { return (typeof object === 'string') ? Array(object) : object }
Suppose:
let m = 'bla' let n = ['bla','Meow'] let y = convertStringToArray(m) let z = convertStringToArray(n) console.log('check y: '+JSON.stringify(y)) . // check y: ['bla'] console.log('check y: '+JSON.stringify(z)) . // check y: ['bla','Meow']
In modern browsers you can do:
Array.isArray(obj)
(Supported by Chrome 5, Firefox 4.0, Internet Explorer 9, Opera 10.5 and Safari 5)
For backward compatibility you can add the following:
// Only implement if no native implementation is available if (typeof Array.isArray === 'undefined') { Array.isArray = function(obj) { return Object.prototype.toString.call(obj) === '[object Array]'; } };
If you use jQuery you can use jQuery.isArray(obj)
or $.isArray(obj)
. If you use Underscore.js you can use _.isArray(obj)
.
If you don't need to detect arrays created in different frames you can also just use instanceof
:
obj instanceof Array
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With