LINUX.ORG.RU

Сообщения zhomart

 

Почему JavaScript (CoffeeScript) не работает так, как я ожидаю?

Привет, есть кусок кода которая переводить JS обьект на URL параметер, типа:

obj = { name: 'test', pwd: '123', data: { count: 2 } }
parameterize(obj) # => "name=test&pwd=123&data[count]=2"

На этих данных функция работает неправильно:

finish_game = {
  "clickCounter" : {"hint" : 0},
  "level": 0,
  "first_word": "Company",
  "edges": {
    "0" : [1,4]
  },
  "vertices":{
    "0" : {"text":"Company", "coordinates": [2427.6,2512.45]}
  }
}

qwe = {}
qwe.data = finish_game
qwe.auth_token = 'asdasd'
qwe.op = "q2wqwe"
qwe.game_code = 'qwe'

parameterize(qwe) # => data[clickCounter][hint]=0&data[clickCounter][level]=0&data[clickCounter][first_word]=Company&data[clickCounter][edges][vertices][0][text]=Company&data[auth_token]=asdasd&data[op]=q2wqwe&data[game_code]=qwe

# data[clickCounter][first_word]=Company  <-- Что ЭТО ???
# data[clickCounter][edges][vertices][0][text]=Company


Вот и сама функция:
parameterize = (params) ->
  pairs = []
  do proc = (object=params, prefix=null) ->
    for own key, value of object
      if value instanceof Array
        for el, i in value
          proc(el, if prefix? then "#{prefix}[#{key}][]" else "#{key}[]")
      else if value instanceof Object
        if prefix?
          prefix += "[#{key}]"
        else
          prefix = key
        proc(value, prefix)
      else
        pairs.push(if prefix? then "#{prefix}[#{key}]=#{value}" else "#{key}=#{value}")
  pairs.join('&')

Код вроде нормальный, подскажите в чем проблема если знаете.

UPDATE:
Хочу получить вот это:

"data[clickCounter][hint]=0&data[level]=0&data[first_word]=Company&data[edges][0][]=1&data[edges][0][]=4&data[vertices][0][text]=Company&data[vertices][0][coordinates][]=2427.6&data[vertices][0][coordinates][]=2512.45&auth_token=asdasd&op=q2wqwe&game_code=qwe"

parameterize(qwe) # =>
"data[clickCounter][hint]=0&data[clickCounter][level]=0&data[clickCounter][first_word]=Company&data[clickCounter][edges][vertices][0][text]=Company&data[auth_token]=asdasd&data[op]=q2wqwe&data[game_code]=qwe"

Код получен отсюда: http://stackoverflow.com/a/9472534

 , ,

zhomart
()

RSS подписка на новые темы