gpt4 book ai didi

javascript - 如何以高效的方式将混合值数组转换为 JSON 数组?

转载 作者:行者123 更新时间:2023-11-30 08:32:48 25 4
gpt4 key购买 nike

在我的场景中,我有序列化的 HTML 数组:

[{ 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 是在其他地方使用的局部 View ,在其他地方发布整个表单。但在这里,我只对问题数据感兴趣并且需要以特定的 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 + map :

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,尽管代码可读性不是最好的。

还有其他(更好的)方法可以进行这种转换吗?特别是没有遍历数组?

最佳答案

你可以使用 reduce ;

var out = arr.reduce(function(p, c, i, a) {
if (i === 0 || i % 2 === 0) {
p.push({ QuestionID: a[i].value, Answer: a[i + 1].value });
}
return p;
}, []);

DEMO

然而,这将命中每个数组元素。我不确定您为什么不喜欢循环,但这是迄今为止最简单的方法,并且只会影响所有其他元素。

for (var out = [], i = 0, l = arr.length; i < l; i+=2) {
out.push({ QuestionID: arr[i].value, Answer: arr[i + 1].value });
}

DEMO

关于javascript - 如何以高效的方式将混合值数组转换为 JSON 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35340047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com