質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

822閲覧

順番に関連性がある2つの配列要素ごとの型指定・型チェックをスマートに書きたい

nomura

総合スコア116

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/07/26 19:16

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などを普通に使うと、見なくて良い場所も参照するので、できれば避けたいです。
  • 連想配列化も考えましたが、引数の型が分からないのと、重複した値が含まれる可能性があるので使えません

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AkitoshiManabe

2020/07/26 22:26

現在の JavaScriptはECMAScript 準拠ですが、IEで使われていた JScriptがターゲットなのでしょうか。
nomura

2022/02/11 01:29

回答遅くなりすみません、 おっしゃる通りJScriptを使っていました。 モダンなものが使えるなら苦労しなかったので、何とかできるライブラリがあればいいな、と思って質問していました。
guest

回答1

0

ベストアンサー

やることは同じなので後は書き方次第

javascript

1result_array=object_array.map((x,y)=>typeof x== type_array[y]);

投稿2020/07/27 00:11

yambejp

総合スコア116732

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2020/07/27 00:14 編集

検出をチェックするならfilterしてlength数える方がよいかも result_array=object_array.filter((x,y)=>typeof x!== type_array[y]); console.log(result_array.length>0?"不正":"問題ない");
nomura

2022/02/11 01:34

ご回答ありがとうございます。 コメントでいただいた方法が最もシンプルに書けそうですね。 当時とは別プロジェクトですが同じ環境に戻ってきたので、こちら早速活用していきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問