Sto cercando di scrivere una funzione che accetti una lista di stringhe o una singola stringa. Se è una stringa, allora voglio convertirla in un array con un solo elemento. Poi posso fare un loop su di esso senza paura di un errore.
Quindi come faccio a controllare se la variabile è un array?
Ho arrotondato le varie soluzioni qui sotto e ho creato un jsperf test.
Il metodo dato nello standard ECMAScript per trovare la classe di Object è di usare il metodo toString
da Object.prototype
.
if( Object.prototype.toString.call( someVar ) === '[object Array]' ) {
alert( 'Array!' );
}
Oppure si può usare typeof
per testare se è una stringa:
if( typeof someVar === 'string' ) {
someVar = [ someVar ];
}
Oppure, se non siete preoccupati per le prestazioni, potreste semplicemente fare un concat
in un nuovo Array vuoto.
someVar = [].concat( someVar );
C'è anche il costruttore che si può interrogare direttamente:
if (somevar.constructor.name == "Array") {
// do something
}
Date un'occhiata ad un trattamento approfondito dal blog di @T.J. Crowder's, come postato nel suo commento qui sotto.
Controlla questo benchmark per avere un'idea di quale metodo si comporta meglio: http://jsben.ch/#/QgYAV
Da @Bharath convertire la stringa in array usando Es6 per la domanda posta:
const convertStringToArray = (object) => {
return (typeof object === 'string') ? Array(object) : object
}
supporre:
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']
Se gli unici due tipi di valori che potrebbero essere passati a questa funzione sono una stringa o un array di stringhe, mantenetela semplice e usate un controllo typeof
per la possibilità di stringa:
function someFunc(arg) {
var arr = (typeof arg == "string") ? [arg] : arg;
}