【问题标题】:Filter Multidimensional Array With One Dimensional Array用一维数组过滤多维数组
【发布时间】:2013-06-09 09:05:21
【问题描述】:

我在一个页面上有一组复选框,当单击这些复选框时,会创建一个值数组(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();
});

【问题讨论】:

    标签: javascript jquery arrays loops multidimensional-array


    【解决方案1】:

    认为您正在寻找类似以下的内容。 (此示例是一个概念验证,肯定有一种更有效的计算方法。)

    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

    【讨论】:

    • 这看起来不错,但我只需要查询 recordSet[i][5],而这似乎查询数组中的所有值。此外,不返回原始多维结构。我无法在每个数组中引用我需要的任何其他值(那些“某些值”在接下来的步骤中很重要。您提到了一个更有效的解决方案,我很想听听您的建议。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 2021-05-24
    • 2018-09-20
    • 1970-01-01
    相关资源
    最近更新 更多