2012-01-17 57 views
2

考虑以下...迭代jQuery对象阵列和非阵列

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对象的一部分数组中的某个项目有一个特殊的价值...基本上看问题的答案是否已经改变或编辑,如是/否收音机已更改或在单选按钮列表中选择了不同的收音机选项,同上复选框,textarays ...

本期2调整findAndRemove迭代每题号排列的n个,并删除或如果它存在,不太清楚如何调整这个为这种递归的拼接出来...

发生了什么事是我不能让的地步findandremove将接受$ QuestionnaireAnswers数组作为参数...

说我将项目添加到它是这样的...

$QuestionnaireAnswers.push($QuestionnaireInProgress); 

然后我打电话findandremove($QuestionnaireAnswers, "QuestionNumber", "1234");

而且我得到了“Microsoft JScript运行时错误:对象预期的非常无用的错误。

我可能是在这个复杂或者缺少明显的东西,所以我很感谢提前

感谢任何意见,建议等。

+0

其中之一,不要在就地迭代阵列时使用'splice'。改用['filter'](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter)函数。对于'findAndRemove'函数,我建议用answers值代替answers数组中的一些问题Y的答案的整个对象。确切地对哪些值进行差异化可能会变得复杂并导致不必要的工作。 – Anurag 2012-01-18 09:17:47

回答

0

你在控制台看了看它的破坏行吗?