Node.jsでquerystring.parseした結果について簡潔なコードが書けないか、お知恵を拝借したいものです。
前提・実現したいこと
- html上のselectタグから0個以上のroleを選択する
- target配列の各要素につき、選択に対応するものをtrueにし、それ以外をfalseにする
- ただしroleが1つも選択されなかった場合は、targetを全てtrueにする
該当のソースコード
HTML
1<form action="./" method="POST"> 2 <select name="role" multiple> 3 <option value="role1">role1</option> 4 <option value="role2">role2</option> 5 <option value="role3">role3</option> 6 </select> 7 <input type="submit" name="button1" value="SUBMIT"> 8</form>
JavaScript
1var querystring = require('querystring'); 2//postのクエリー文字列はarg1に格納 3var postparm = querystring.parse(arg1); 4 5//postparm.roleが単数の場合も配列にする 6var roletmp=[]; 7if (Array.isArray(postparm.role)){ 8 roletmp = postparm.role; 9}else if (typeof(postparm.role) == "undefined"){ 10 roletmp = undefined; 11}else{ 12 roletmp = Array(postparm.role); 13} 14 15var target = Array(3); 16if (typeof (roletmp) != "undefined") { 17 target.fill(false); 18 for (var i = 0; i < roletmp.length; i++) { 19 target[roletmp[i].substr(-1) - 1] = true; 20 } 21} else { 22 //選択無しなら全選択 23 target.fill(true); 24}
質問
上記のコードにて意図通りに動作しています。
しかしroleが単数だとpostparm.roleが配列にならず、配列roletmpを間に挟む形にし一見して意味不明な処理があるため、可読性を落としていると感じています。
一般的に、querystring.parse結果の処理にあたっては、上記のように変数の返り値が単数 (配列にならない) か複数 (配列になる) かを判定し個別にコードを書くものでしょうか。
あるいは、もし単数でも複数でも同一のコードで処理できるテクニックがあるならご教示いただけますでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。