2013-06-13 67 views
0

我在頁面上有一組複選框,點擊後,創建一個數值(allVals),這個數組隨着框的選中/取消選中而變化(字符串輸出也是一個選項)。我還有另一個多維數組(recordSet),我想根據檢查的值(allVals)過濾它(在下面的例子中:recordSet [i] [5]),然後返回一個新的多維數組,只有匹配的索引和他們的價值觀。在這種情況下,它將僅返回第一個recordSet [0],因爲包含「cat」。每當選中/取消選中某個複選框時,recordSet將被再次過濾,新創建的多維數組將被更新。使用一維數組篩選多維數組

我已經看過undercore.js,我也在頁面上使用,但不確定如何構造過濾器和循環。任何幫助都非常感謝,指出我在正確的方向 - 打開其他建議來完成。

allVals = ["cat", "dog"] 
recordSet = 0: Array[6] 
       0: "somevalue" 
       1: "somevalue" 
       2: "somevalue" 
       3: "somevalue" 
       4: "somevalue" 
       5: "Cat;Monkey;Elephant;Rooster" 
      length: 6 

      1: Array[6] 
       0: "somevalue" 
       1: "somevalue" 
       2: "somevalue" 
       3: "somevalue" 
       4: "somevalue" 
       5: "Giraffe;Turtle;Rabbit;Snake" 
      length: 6 

function updateSubTopics() { 
    var allVals = []; 

    $('.subCheck').each(function() { 
     if (this.checked){ 
      allVals.push($(this).val()); 
     } 

    }); 

$(function() { 
    $('.subCheck').click(updateSubTopics); 
     updateSubTopics(); 
}); 

回答

0

認爲你正在尋找的東西像下面這樣。 (這個例子是一個驗證的概念,有肯定更有效的方式來計算這一點。)

var animals = ['cat', 'dog']; 

var values = [ 
    ['chicken;cat;', 'foobar'], 
    ['pig;rat;', 'dog;lizard;'] 
]; 

_.flatten(_.map(animals, function (animal) { 
    return _.flatten(_.map(values, function (value) { 
     return _.flatten(_.reject(value, function (x) { 
      return x.indexOf(animal) === -1; 
     })); 
    })); 
})); 

// ["chicken;cat;", "dog;lizard;"] 

Fiddle

+0

這看起來不錯,但我只需要記錄[I] [5]查詢,而這似乎查詢數組中的所有值。另外,原始的多維結構不會被返回。我無法在每個數組中引用任何其他值(這些「一些值」在接下來的步驟中非常重要)。您提到了一種更高效的解決方案,我很樂意聽取您的建議。 – McKev