【发布时间】:2012-02-12 10:46:36
【问题描述】:
考虑以下...
var $QuestionnaireAnswers = [];
var $QuestionnaireInProgress =
{
Questions: {
QuestionNumber: null,
Options: [],
YesNo: [],
TextArea: []
}
};
function findAndRemove(array, property, value) {
$.each(array, function(index, result) {
if(result[property] == value) {
//Remove from array
array.splice(index, 1);
}
});
}
基本上,我拥有的是一个数据驱动的问卷,对于每个问题编号,它可以有 0 个或更多,选项可以是单选按钮列表或复选框以及 0 个或更多是/否单选按钮组;和或零个或多个文本区域...
$QuestionnaireAnswers 数组最终将发布到我的 mvc3 控制器...
一个 $QuestionnaireInProgress 对象根据 jquery 点击/更改事件和其他条件添加到 $QuestionnaireAnswers 数组中...对于每个问题编号。
当前问题 1 是集成 findAndRemove 函数,我将递归地使用该函数来告诉我是否存在问题编号,然后我将再次调用它并查看作为 $QuestionnaireInProgress 对象一部分的数组之一中的项目是否具有其中的特定值...基本上是查看问题答案是否已更改或编辑,例如已更改是/否单选或在单选按钮列表中选择了不同的单选选项,复选框,文本框同上。 ..
当前问题 2 正在调整 findAndRemove 以迭代每个问题编号的 n 个数组,如果存在则将其删除或拼接出来,不太确定如何针对这种递归进行调整...
我无法达到 findandremove 将接受 $QuestionnaireAnswers 数组作为参数的地步...
假设我像这样添加一个项目......
$QuestionnaireAnswers.push($QuestionnaireInProgress);
然后我打电话给findandremove($QuestionnaireAnswers, "QuestionNumber", "1234");
我得到了几乎没有用的错误“Microsoft JScript 运行时错误:预期对象。
我可能过于复杂或遗漏了一些明显的东西,所以我感谢任何 cmet、建议等。
提前致谢。
【问题讨论】:
-
一方面,在原地迭代数组时不要使用
splice。请改用filter函数。对于findAndRemove函数,我建议简单地将代表答案数组中某个问题 Y 的答案的整个对象替换为新值。对更改的值进行比较可能会变得复杂并导致不必要的工作。
标签: jquery asp.net-mvc-3 object multidimensional-array