Как я могу проанализировать этот самодельный формат данных на основе строк?

#javascript #jquery

#javascript #jquery

Вопрос:

Мне нужно выполнить итерацию по набору данных идентификаторов и меток. Я правильно понял некоторую часть кода, но мне нужна помощь.

 // 1. String
var string = '1:answer1,2:answer2,3:answer3,4:answer4,5:answer5,'

// 2. Split to array 
var string = string.split(",");

// 3. EACH 
$.each(string, function(key, val) {

    var answer = answer.split(":");
    $.each(answer, function(key1, val1) {
       // output textfield with id of key1 and value of val1 
    });

});
  

Я могу просмотреть первый набор данных, разделенный запятой, но не следующий (:). Как мне это сделать?

Комментарии:

1. Вы можете контролировать формат строковых данных? Если это так, было бы намного проще преобразовать его в формат JSON.

2. Совет: Не называйте свои массивы так, как вы называете свои строки. Это действительно сбивает с толку и затрудняет понимание кода.

3. @ Rory McCrossan: Строка берется из Rails, я посмотрю в JSON .. Спасибо! @Rodolphe: спасибо .. строка была просто использована для создания примера : )

Ответ №1:

 $.each(string, function(key, val) {

        var answer = val.split(":");

        key1 = answer[0];
        val1 =  answer[1];

        alert(key1 "--" val1);
    });
  

Ответ №2:

это должно быть var answer= val.split(":"); вместо var answer = answer.split(":") ;

Ответ №3:

Вы можете использовать String.replace в качестве итератора:

 var string = '1:answer1,2:answer2,3:answer3,4:answer4,5:answer5,'

var html = []

string.replace(/([^:] ):([^,] )(,|$)/g, function(_, key, val) {
     html.push("<input name='"   key   "' value='"   val   "'>")
});

alert(html.join("n"))
  

Ответ №4:

Конечно, я ничего не имею против вашей самодельной строки, но рассматривали ли вы возможность использования JSON для инкапсуляции данных в строку. Хотя JSON универсален, он, вероятно, идеально подходит для JavaScript.

Итак, если бы вы закодировали свои данные следующим образом, это действительно было бы проще простого:

 var data = [
    {
        "id": 1,
        "answer": "answer1"
    },
    {
        "id": 2,
        "name": "answer2.. etc."
    }
];
  

Итак, теперь вы можете очень легко получить доступ к своим данным, используя массив и обозначение свойств:

 alert (data[0].answer);
  

Обновление: Итак, если вам повезет и ваше приложение Rails находится на версии 3.1, то добавить поддержку JSON действительно проще простого:

Для базовой поддержки JSON единственное, что вам нужно сделать, это:

 # GET /answers/1
# GET /answers/1.json
def show
  @answer = Answer.find(params[:id])

  respond_to do |format|
    format.html # show.html.erb
    format.json do
        render json: @answer
    end
  end
end
  

Комментарии:

1. Отлично, спасибо.. но я получаю строку из rails.. Я думаю, было бы легко преобразовать его в JSON.

2. JSON и rails очень хорошо сочетаются, я обновил свой ответ примером того, как может выглядеть ваш контроллер.