0

ページにチェックボックスのグループがあり、クリックすると、ボックスのチェック/チェック解除に応じて変化する値の配列 (allVals) が作成されます (文字列出力もオプションです)。また、別の多次元配列 (recordSet) もあり、これをチェックした値 (allVals) に基づいてフィルター処理し (以下の例では recordSet[i][5])、一致するインデックスのみを含む新しい多次元配列を返します。とその値。この場合、「cat」が含まれているため、最初の recordSet[0] のみが返されます。チェック ボックスがオン/オフされるたびに、recordSet が再度フィルター処理され、新しく作成された多次元配列が更新されます。

ページでも使用しているunderscore.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();
});
4

1 に答える 1

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;"] 

フィドル

于 2013-06-13T05:36:35.173 に答える