2つの配列で、順番に関連性があるケースを扱う際のチェックについて、もっと手軽に出来ないか?という質問です。
やりたいこと
object_array = [ "文字列", "1", 1, [], {}, ]; type_array = [ "string", "string", "number", "object", "object" ]
というような配列があり、以下の関数で引数として妥当か検知したいです。
function astypes(object_array, type_array) { result_array = new Array(); for(var i = 0; i < object_array.length; i++) { result_array[i] = typeof(object_array[i]) == type_array[i]; } return result_array; }
今現状の内容でもresult_arrayのtrue/falseを取ればやりたい事は実現できますので、動作上困ってはいないのですが、もっとスマートに書ける方法があると思っていますので、それが期待する回答です。
なお、判定部分についてはtypeof以外の精度の高い書き方が他にありますが、ここでは期待していないです。
補足
今回のやりたいことに直接影響があるかわかりませんが、目的です。
いくつあるか分からない引数の型チェックを想定しています。
function hoge1(str1, str2, num1, obj1, obj2) { type_array = ["string", "string", "number", "object", "object"]; result_array = astypes([str1, str2, num1, obj1, obj2], type_array); if (result.array.includes(false)) return "不正な要素を検出しました"; ... } function hoge2(num1, num2) { console.log(num1) // 1 console.log(num2) // 2 type_array = ["string", "object"]; result_array = astypes([num1, num2], type_array); if (result.array.includes(false)) return "不正な要素を検出しました"; ... }
制約
- 今回はJqueryをはじめECMAやBabel、Coffeeなどは使えません。
- スプレッド構文などが使えれば非常に楽なのですが、上記に該当するため不可です。
- filterなどを普通に使うと、見なくて良い場所も参照するので、できれば避けたいです。
- 連想配列化も考えましたが、引数の型が分からないのと、重複した値が含まれる可能性があるので使えません
回答1件
あなたの回答
tips
プレビュー