2012-01-17 60 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

你在控制檯看了看它的破壞行嗎?