Hoe controleer je of een object een array is?

Ik probeer een functie te schrijven die ofwel een lijst van tekenreeksen, ofwel een enkele tekenreeks aanvaardt. Als het een string is, dan wil ik het converteren naar een array met slechts één item. Dan kan ik er een lus over maken zonder bang te hoeven zijn voor een fout.

Dus hoe controleer ik of de variabele een array is?


Ik'heb de verschillende oplossingen hieronder op een rijtje gezet en een jsperf test gemaakt.

De methode die in de ECMAScript standaard wordt gegeven om de klasse van Object te vinden is om de toString methode uit Object.prototype te gebruiken.

if( Object.prototype.toString.call( someVar ) === '[object Array]' ) {
    alert( 'Array!' );
}

Of je kunt typeof gebruiken om te testen of het een String is:

if( typeof someVar === 'string' ) {
    someVar = [ someVar ];
}

Of als je je geen zorgen maakt over de performance, zou je gewoon een concat naar een nieuwe lege Array kunnen doen.

someVar = [].concat( someVar );

Er'is ook de constructor die je direct kunt opvragen:

if (somevar.constructor.name == "Array") {
    // do something
}

Bekijk een grondige behandeling van @T.J. Crowder's blog, zoals gepost in zijn commentaar hieronder.

Bekijk deze benchmark om een idee te krijgen welke methode beter presteert: http://jsben.ch/#/QgYAV

Van @Bharath converteer string naar array met Es6 voor de gestelde vraag:

const convertStringToArray = (object) => {
   return (typeof object === 'string') ? Array(object) : object 
}

stel:

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']
Commentaren (29)

Ik zou eerst controleren of uw implementatie isArray ondersteunt:

if (Array.isArray)
    return Array.isArray(v);

Je zou ook kunnen proberen om de instanceof operator te gebruiken

v instanceof Array
Commentaren (11)

Als de enige twee soorten waarden die aan deze functie kunnen worden doorgegeven een string of een array van strings zijn, houd het dan eenvoudig en gebruik een typeof controle voor de string mogelijkheid:

function someFunc(arg) {
    var arr = (typeof arg == "string") ? [arg] : arg;
}
Commentaren (1)