Перестройка в Javascript Object - PullRequest
0 голосов
/ 29 апреля 2018

РЕДАКТИРОВАТЬ: я делаю опрос с Angular. В этом проекте вопросы будут добавляться динамически, а на вопросы будут даваться модели ответов. Например, «множественный выбор, простой текст, рейтинг в звездочке»

Поскольку количество вопросов и количество ответов являются динамическими, я также динамически задаю «имя для ввода». И объект, созданный при публикации формы, выглядит следующим образом.

У меня есть такой объект.

    {
    "title": "anket başlığı",
    "sms": "sms mesajı",

    "question-1": "bu birinci soru",
    "answer-1": "1",

    "question-2": "bu ikinci soru",
    "answer-2": "6",
    "answers-2-1": "cevap 1",
    "answers-2-2": "cevap 2",
    "answers-2-4": "cevap 4",

    "question-4": "soru 4",
    "answer-4": "7",
    "answers-4-5": "qwe1",
    "answers-4-6": "qwe2",
    "answers-4-7": "qwe3",

    "question-5": "soru 5",
    "answer-5": "6",
    "answers-5-10": "ccc3",
    "answers-5-11": "ccc4"
}

В этом объекте «вопрос-1» - это первый вопрос, а «ответ-1» - это тип ответа на первый вопрос. «вопрос-2» - это второй вопрос, а «ответ-2» - это тип ответа на 2-й вопрос, а «ответы-2-1, ответы-2-2, ответы-2-4» являются ответом на 2-й вопрос.

Я хочу динамически создать форму «вопрос-1, вопрос-2, вопрос-4, вопрос-5» в этом объекте.

РЕДАКТИРОВАТЬ: Мне нужно перенести этот объект в следующую структуру для отправки веб-службы.

    {
    "title": "anket başlığı",
    "sms": "sms mesajı",
    "questions" : [
        {
            "question": "bu birinci soru",
            "answer_model_id": "1",
            "answers": []
        },
        {
            "question": "bu ikinci soru",
            "answer_model_id": "6",
            "answers": [
                {
                    "answers": "cevap 1"
                },
                {
                    "answers": "cevap 2"
                },
                {
                    "answers": "cevap 4"
                }
            ]
        },
        {
            "question": "soru 4",
            "answer_model_id": "7",
            "answers": [
                {
                    "answers": "qwe1"
                },
                {
                    "answers": "qwe2"
                },
                {
                    "answers": "qwe3"
                }
            ]
        },
        {
            "question": "soru 5",
            "answer_model_id": "6",
            "answers": [
                {
                    "answers": "ccc3"
                },
                {
                    "answers": "ccc4"
                }
            ]
        }
    ]
}

РЕДАКТИРОВАТЬ 2: Я храню количество вопросов с переменной. Я знаю, что мне нужно сделать это, установив цикл с этой переменной. Но «вопрос первый, вопрос-2, 4-вопрос, вопрос-5» я не знал, как отличить.

1 Ответ

0 голосов
/ 29 апреля 2018

Вы можете использовать объект в качестве ссылки на вопрос с тем же индексом. Для назначения данного ключа вы можете разделить ключи и назначить значения проверкой ключа.

var data = { "title": "anket başlığı", "sms": "sms mesajı", "question-1": "bu birinci soru", "answer-1": "1", "question-2": "bu ikinci soru", "answer-2": "6", "answers-2-1": "cevap 1", "answers-2-2": "cevap 2", "answers-2-4": "cevap 4", "question-4": "soru 4", "answer-4": "7", "answers-4-5": "qwe1", "answers-4-6": "qwe2", "answers-4-7": "qwe3", "question-5": "soru 5", "answer-5": "6", "answers-5-10": "ccc3", "answers-5-11": "ccc4" },
    reference = {};

data.questions = [];

Object.keys(data).forEach(k => {
    var [key, index] = k.split('-');
    if (!index) {
        return;
    }
    if (!reference[index]) {
        data.questions.push(reference[index] = {});
    }
    if (key === 'question') {
        reference[index].question = data[k];
    }
    if (key === 'answer') {
        reference[index].answer_model_id = data[k];
    }
    if (key === 'answers') {
        reference[index].answers = reference[index].answers || [];
        reference[index].answers.push({ answers: data[k] });
    }
    delete data[k];
});

console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...