(JS) Для цикла объедините object и int var

Я загружаю JSON-файл с таким содержимым:

"forget": {
    "form_elements": 2,

    "input1": {
        "type": "text",
        "placeholder": "E-mail adres invullen...",
        "value": ""
    },
    "input2": {
        "type": "submit",
        "placeholder": "",
        "value": "Opvragen"
    }
}

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

После создания элемента я зацикливаюсь на входах, используя этот цикл:

    for (var i = 1; i <= data[get].form_elements; i++) {
        var input = data[get].input+i;

        $overlay.append( $("<input />").attr({
            type: input.type,
            placeholder: input.placeholder,
            value: input.value
        }));
    }

Наложение - это я только что создал. С этими кодами вставляются 2 основных поля ввода без типа, заполнителя и значения. Это потому, что этот код не работает:

var input = data[get].input+i;

Но когда я использую это:

var input = data[get].input1;
var input = data[get].input2;

Все отлично работает

Когда я записываю переменную "i" в цикле, вижу, что число возрастает.

Я также подумал, что мне придется преобразовать его в строку с .toString, но это также не работает.

Итак, мой вопрос, почему это не работает? И что я могу с этим поделать? Надеюсь, я хорошо объяснил свою проблему. Спасибо вперед.

1 ответ

Решение

То, как вы это делаете, не очень хороший способ: вы пытаетесь эмулировать массив, используя объект.

Прежде всего, ваш код должен работать, если вы делаете это:

var input = data[get]["input"+i];

Во-вторых, я рекомендую вам изменить содержание на это:

          "forget": {
            "input1": {
                    "type": "text",
                    "placeholder": "E-mail adres invullen...",
                    "value": ""
            },
            "input2": {
                    "type": "submit",
                    "placeholder": "",
                    "value": "Opvragen"
            }
    }

И ваш цикл должен быть:

for (var key in data[get]) {
    var input = data[get][key];
    ...
}

Если вы действительно хотите использовать массив, вы должны иметь это в качестве данных JSON:

            "forget":  [
                    {
                            "type": "text",
                            "placeholder": "E-mail adres invullen...",
                            "value": ""
                    },
                    {
                            "type": "submit",
                            "placeholder": "",
                            "value": "Opvragen"
                    }
            ];
            for(var i = 0, len = data[get].length; i < len ; i++){
                                    var input = data[get][i];
                ...
            }

Я рекомендую вам выбрать один из двух методов.

Массив и объекты не обрабатываются одинаково, поэтому вы должны выбрать, какой тип использовать в соответствии с вашими потребностями.

Другие вопросы по тегам