在Javascript对象中重新构造

时间:2018-04-29 19:48:17

标签: javascript arrays object

  编辑:我正在与Angular进行调查。在这个项目中,问题将被动态添加,答案模型将被提供给问题。   例如,"多重选择,纯文本,星级"

由于问题的数量和回复的数量是动态的,我还给出了#34;输入名称"动态。发布表单时创建的对象如下所示。

我有这样一个对象。

    {
    "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-1,答案-2-2,答案-2-4和#34;是第二个问题的答案。

我想动态地塑造"问题-1,问题2,问题4,问题5"在这个对象中。

  

编辑:我需要将此对象带到以下结构以发送Web服务。

    {
    "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 :(得分:0)

您可以使用对象作为具有相同索引的问题的引用。对于给定键的分配,您可以拆分键并通过检查键来分配值。



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; }