2012-02-24 13 views
0

私はこのルビーオブジェクトjqueryオートコンプリート用のハッシュ配列をどのようにマップできますか?

options = [ 
    {"ActionScript"=>"orange"}, 
    {"AppleScript"=>"orange"}, 
    {"Asp"=>"red"}, 
    {"BASIC"=>"green"}, 
    {"C"=>"blue"}, 
    {"C++"=>"purple"}, 
    {"Clojure"=>"green"}, 
    {"COBOL"=>"red"}, 
    {"ColdFusion"=>"red"}, 
    {"Erlang"=>"green"}, 
    {"Fortran"=>"orange"}, 
    {"Groovy"=>"green"}, 
    {"Haskell"=>"green"}, 
    {"Java"=>"green"}, 
    {"JavaScript"=>"brown"}, 
    {"Lisp"=>"purple"}, 
    {"Perl"=>"blue"}, 
    {"PHP"=>"red"}, 
    {"Python"=>"green"}, 
    {"Ruby"=>"green"}, 
    {"Scala"=>"green"}, 
    {"Scheme"=>"orange"} 
] 

を持っていると私はそれがこれにマッピングすることがしたい:事前に

[{"name":"ActionScript","value":"orange"},{"name":"AppleScript","value":"orange"}...] 

感謝を。

+1

質問はJSONとjqueryの - オートコンプリートをタグ付けしましたが、ために表示されません。 *直接*関連していないもの – tokland

+0

マップはjsonであるため、=>ではなく、 "name"と "value"のためにjquery auto completeに関連しています –

答えて

2
require 'json' 

options.map {|elem| elem.map {|k,v| {:name => k, :value => v}}}.flatten.to_json 
+0

'elem'の' map'はなぜよく分かりません。 – tokland

+0

私はマップが大好き!特にナショナルジオグラフィックのもの。そしてスターマップ。マップマップ、あなたは多くのマップを持つことはできません! – zetetic

+0

まあ、初めてだった。内側のマップでは、ハッシュキー/値のparisを得ることができ、ハッシュごとに1つのキーに依存します。 'reduce'を使ってあなたのバージョンをもっともっと綺麗に見せてください。 – zetetic

1

あなたは簡単な使用to_jsonを方法、また

 
require 'json' 
options = options.map {|elem| elem.map {|k,v| {:name => k, :value => v}}}.flatten 
js_options = options.to_json 
+0

なぜこれをerbタグに入れていますか?確かに、ロジックをビューに入れないことをお勧めしますか? –

+0

yeh私は、正しいjsが生成されたら、erbタグを残して、テストしようとしていました。編集 –

2
options.map do |option| 
    key, value = option.first 
    {"name" => key, "value" => value} 
end # add .to_json if you want a JSON string 

ことができます。

options.reduce(:merge).map { |k, v| {"name" => k, "value" => v} } 
+0

+1私は認めなければなりません、これは優れています:) – zetetic

関連する問題