在我的情況,我有序列化的HTML數組:如何以有效的方式將混合值的數組轉換爲JSON數組?
[{ name: "Questions[0].ID", value: 1 }, {name: "Questions[0].Answer", value: "Yes"}, { name: "Questions[1].ID", value: 2 }, {name: "Questions[1].Answer", value: "No"}]
我需要序列化這個HTML表單並改變其格式,因爲這個HTML是在其他地方使用的局部圖,其中整體形式發佈。但是在這裏,我只對問題數據感興趣,並且需要以特定的JSON格式發佈。
的JSON結構將是:
[{ QuestionID: 1, Answer: "Yes" }, { QuestionID: 2, Answer: "No" }]
溶液1 - 環通過陣列:
var surveyResponses = [{
name: "Questions[0].ID",
value: 1
}, {
name: "Questions[0].Answer",
value: "Yes"
}, {
name: "Questions[1].ID",
value: 2
}, {
name: "Questions[1].Answer",
value: "No"
}];
var responsesList = new Array();
if (surveyResponses != null && surveyResponses.length > 0) {
for (var i = 0; i < surveyResponses.length; i++) {
var answer = surveyResponses[i++].value;
var questionID = surveyResponses[i].value;
responsesList.push({
QuestionID: questionID,
Answer: answer
});
}
}
document.write("<pre>" + JSON.stringify(responsesList) + "</pre>")
解決方案2 - grep的+地圖:
var surveyResponses = $("#QuestionsDiv").serializeArray();
var offset = 0;
var responsesList = $.grep(surveyResponses,
function (answer) {
return answer.name.indexOf("Answer") > -1;
}).map(function (answer, i) {
return { QuestionID: surveyResponses[i + (++offset)].value, Answer: answer.value };
});
到目前爲止,我想出了這兩個解決方案。我特別喜歡解決方案2,但是,代碼的可讀性並不是最好的。
是否有任何其他(更好)的方式來做這種轉換?特別是沒有循環數組?
感謝@Andy,我喜歡多麼簡單,這些都是。 –