itsme213 wrote: > Ah, I need to think more "functional programming". > > Thanks a bunch, all. Useful general lesson for me. > > "Martin DeMello" <martindemello / yahoo.com> wrote in message > news:3BjWe.204172$Hk.56955 / pd7tw1no... >> itsme213 <itsme213 / hotmail.com> wrote: >>> I have a hash table HASH containing strings, and want to generate a >>> string for an equivalent Javascript variable JS from it e.g. >>> >>> HASH = {'a' => 'A', 'b' => 'B'} >>> >>> "var JS = { 'a' : 'A', 'b' : 'B' }" >>> >>> I thought inject was just the ticket: >>> >>> 'var JS = {' + >>> HASH.inject("") { |str, kv| str << "\n\t'#{kv[0]}' : #{kv[1]}, " >>> } + "};" >>> >>> But this puts a "," after the last item. Is there a simple >>> alternative? >> >> The simplest is the two-pass >> >> 'var JS = {' + HASH.map {|k,v| "'#{k}' : '#{v}'"}.join(",\n\t") + >> "};" >> >> #join has extra logic to specialcase the last element, which is >> painful with #inject. Here's a solution with #inject: >> HASH = {'a' => 'A', 'b' => 'B'} => {"a"=>"A", "b"=>"B"} >> "var JS = {" << HASH.inject("") {|s,(k,v)| s << ", " unless s.empty?; s << "'" << k << "' : '" << v << "'"} << "}" => "var JS = {'a' : 'A', 'b' : 'B'}" This is ugly. robert