文字列のリストを受け取るか、単一の文字列を受け取るかの関数を書こうとしています。文字列の場合は、1つの項目だけを持つ配列に変換したいのです。そうすれば、エラーを恐れずにループすることができます。
では、変数が配列であるかどうかを確認するにはどうすればよいのでしょうか?
以下に様々な解決策をまとめて、jsperf testを作ってみました。
ECMAScriptの規格では,Objectのクラスを知るためには,Object.prototype
のtoString
メソッドを使うことになっています.
if( Object.prototype.toString.call( someVar ) === '[object Array]' ) {
alert( 'Array!' );
}
あるいは、typeof
を使って String であるかどうかをテストすることもできます。
if( typeof someVar === 'string' ) {
someVar = [ someVar ];
}
また、パフォーマンスを気にしないのであれば、新しい空の配列に concat
を実行することもできます。
someVar = [].concat( someVar );
また、コンストラクタを使って直接クエリを実行することもできます。
if (somevar.constructor.name == "Array") {
// do something
}
以下のコメントに掲載されている@T.J. Crowder'sブログの徹底的な処理をチェックしてください。
どちらの方法が優れているかを知るために、この[ベンチマーク][3]をチェックしてみてください。http://jsben.ch/#/QgYAV
Bharath][4]からは、質問された内容について、Es6を使って文字列を配列に変換しています。
const convertStringToArray = (object) => {
return (typeof object === 'string') ? Array(object) : object
}
を想定しています。
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']
[3]: http://jsben.ch/#/QgYAV [4]: https://stackoverflow.com/users/8432239/bharath?tab=profile