2016-09-01 10 views
-7

どのように入力として文字列のリストを取るjavascriptで関数を実装でき、すべての文字列を解析できる「最小」(緩やかに話す)型を出力しますか?「最小の」データ型を導出するためのJavaScript関数?

例:

  • 入力:[、 "真" "偽"、 "偽"] =>出力: "ブール"。

  • 入力:["1"、 "4"、 "-9"] =>出力: "int"。

  • 入力:["1"、 "4.3"、 "-9"] =>出力: "float"(または "double"、重要ではない)

  • 入力:["9/1/2016"、 "2016-9-1"] =>出力: "DateTime"。

  • 入力:["1"、 "4.3"、 "9/1/2016"、 "Nastassja Kinski"] =>出力: "文字列"。

備考:

  • それは、 "文字列" として、他のすべて(機能、オブジェクト、配列)を標識しても大丈夫です。
  • 時刻コンポーネントがない場合でも、日付に関連するものは「DateTime」とラベル付けしても問題ありません。
  • intとfloatの区別が必要です(そのため、ouputsはNumberなどのネイティブタイプではなく文字列です)。
  • 完全である必要はありません。おおまかに働くもの(私が必要な場合には洗練することができます)。
  • 入力配列にはそれぞれ100個の要素があります。

ありがとうございます!宣言それについて考え

+1

ここでの目標は何ですか。なぜあなたはそのタイプを知る必要がありますか? – Adjit

+3

SOは私たちがコードを書く場所ではありません。特定の質問をして、これまでに試したことを私たちに教えてください。 –

+1

'出力:" DateTime "。'うん、少年。それを楽しんでください。これは、プロジェクト全体で簡単に行うことができます。 – vlaz

答えて

1

あなたが基準を考えるならば、それは、非常に簡単です:

function getType(arr) { 
    if (arr.every(s => s === 'true' || s === 'false')) 
     return 'boolean' 
    else if (arr.every(s => isNaN(Number(s)) === false)) { 
     if (arr.every(n => Number(n) % 1 === 0)) return 'int' 
     else return 'float' 
    } 
    else if (arr.every(s => isNaN(Date.parse(s)) === false)) 
     return 'DateTime' 
    else return 'string' 
} 

あなたの入力を備えたテスト:

> getType(["true", "false", "false"]) 
'boolean' 
> getType(["1","4","-9"]) 
'int' 
> getType(["1","4.3","-9"]) 
'float' 
> getType(["9/1/2016", "2016-9-1"]) 
'DateTime' 
> getType(["1", "4.3", "9/1/2016", "Nastassja Kinski"]) 
'string' 

人々がを考えるしようとすると困難が生じコード結果を生成します。代わりに、コードを書く方法ではなく、あなたが望むものについて考えるならば、要件はより明確になり、解決策はより明確になります。

ここで学ぶべきもう一つのことは、可能な限り私たちに多くの仕事をさせるために、javascript(またはそれが選択した言語が違う場合)をどのようにしたかです。明確な述語構文と組み込み関数(isNaNと組み込みのDateオブジェクト)を使用してください。これは8行のコードしかなく、わかりやすいものです。

誰かが、実装によって異なる日付形式についてコメントしました。これは良い点です。一般的な日付形式はすべての主要な実装でサポートされますが、日付形式がよりエキゾチックであることがわかったら、独自の日付バリデータを書き込んでプラグインするだけです。いずれにしても、アプローチは変わりません。

+1

素晴らしい、私はそれが大好きです、私はjavascriptにはとても新しいので、javascriptが.NETのLinqクエリ(私が愛している)とおおよそ似ていたことさえ知らなかった。どうもありがとう! – zalofg

+0

日付バリデーターの追加作業をありがとうございました。私が探していたものは、全体的に素晴らしい答えでした。 – zalofg

関連する問題