Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I check if an object is an array? [duplicate]

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?

like image 967
mpen Avatar asked Jan 23 '11 18:01

mpen


People also ask

How do you check if there is a duplicate number in 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. }

How do you check if there is a duplicate in an array Java?

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.


2 Answers

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'] 
like image 100
user113716 Avatar answered Oct 25 '22 07:10

user113716


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 
like image 25
Fela Avatar answered Oct 25 '22 08:10

Fela