使用一维数组过滤多维数组

时间:2013-06-13 04:30:54

标签: javascript jquery arrays loops multidimensional-array

我在页面上有一组复选框,单击这些复选框时,会创建一个值数组(allVals),这些值会在选中/取消选中框时更改(字符串输出也是一个选项)。我还有另一个多维数组(recordSet),我想根据检查的值(allVals)过滤(例如下面的例子:recordSet [i] [5]),然后返回一个只有匹配索引的新的多维数组和他们的价值观。在这种情况下,它将仅返回第一个recordSet [0],因为包含了“cat”。每次选中/取消选中复选框时,将再次过滤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();
});

1 个答案:

答案 0 :(得分: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