【问题标题】:Javascript index of for multiple values多个值的 Javascript 索引
【发布时间】:2012-08-06 14:04:49
【问题描述】:

我有一个像这样的多维 javascript 数组。

[
["9", "16", "19", "24", "29", "38"],
["9", "15", "19", "24", "29", "38"],
["10", "16", "19", "24", "29", "38"],
["9", "16", "17", "19", "24", "29", "39"],
["10", "16", "17", "19", "24", "29", "39"],
["9", "15", "21", "24", "29", "38"]

.......
.......
]

确切地说是大约 40 个

我还有一个名为 check 的数组,包含以下值

 [9,10] //This is of size two for example,it may contain any number of elements BUT it only contains elements(digits) from the multidimensional array above

我想要的是我需要根据检查数组元素使多维数组唯一

1.检查数组是否为[15]的示例 那么多维数组就是

[
    ["9", "15", "19", "24", "29", "38"],
   //All the results which contain 15

]

2.检查数组是否为[15,21]的示例 那么多维数组就是

[
    ["9", "15", "21", "24", "29", "38"]
    //simply containing 15 AND 21.Please note previous example has only 15 in it not 21
    //I need an AND not an OR

]

我尝试过 JavaScript IndexOf 方法,但它得到的是 OR'ed 结果,而不是 AND

提前致谢

【问题讨论】:

  • “确切地说是 40 左右” - 啊,讽刺。
  • @nnnnnn ..希望你明白了。如果不是生病解释更多
  • 是的,您要过滤原始数组以返回包含检查数组中所有元素的所有子数组。除了您的第二个示例返回一个未在您的原始文件中显示的子数组,所以也许我不明白。 (我之前的评论只是在取笑你在那里选择的词语。)
  • 是的...@nnnnnn 关键字是我需要AND ed 结果:)
  • @nnnnnn:这可能是他的大约 40 个 :)

标签: javascript loops for-loop indexing


【解决方案1】:

您可以使用.filter() method:

var mainArray = [ /* your array here */ ],
    check = ["15", "21"],
    result;

result = mainArray.filter(function(val) {
    for (var i = 0; i < check.length; i++)
        if (val.indexOf(check[i]) === -1)
            return false;    
    return true;
});

console.log(result);

演示:http://jsfiddle.net/nnnnnn/Dq6YR/

注意 .filter() 直到版本 9 才被 IE 支持,但 you can fix that

【讨论】:

    【解决方案2】:

    使用.filter.every,您可以过滤行中每个参数都明显可见的行:

    var filter = function(args) {
      return arr.filter(function(row) {
        return args.every(function(arg) {
          return ~row.indexOf(String(arg));  // [15] should search for ["15"]
        });
      });
    };
    

    .every 在这里有效地执行了AND 操作;对于OR,您可以改用.some。这些数组函数在较新的浏览器上可用。

    【讨论】:

    • 那里的波浪号 (~) 是怎么回事? :/ ~row
    【解决方案3】:

    还有一个解决方案是不使用filter()every()

    // function
    
    function AndArray(start, check) {
    
        this.stripArray = function(element, array) {
            var _array = [];
            for(var i = 0; i < array.length; i++)
                for(var j = 0; j < array[i].length; j++)
                    if(element == array[i][j]) _array.push(array[i]);
            return _array;
            }
    
        for(var k = 0; k < start.length; k++)
            if(start.length > 0) start = this.stripArray(check[k], start);
    
        return start;
    
        }
    
    // use
    
    var check = [15, 21];
    
    var start= [[ 15, 6 , 8], [3, 21, 56], [15, 3, 21]];
    
    console.log(AndArray(start, check));    
    

    【讨论】:

      【解决方案4】:

      应该这样做

      var checkURL = function (url) {
        var final = false;
        if (url.indexOf('jpg') > -1) {
          final = true
        }
      
        if (url.indexOf('jpeg') > -1) {
          final = true
        }
      
        if (url.indexOf('gif') > -1) {
          final = true
        }
      
        if (url.indexOf('png') > -1) {
          final = true
        }
      
        return final
      }

      【讨论】:

        猜你喜欢
        • 2018-12-17
        • 2015-10-06
        • 2013-05-06
        • 1970-01-01
        • 1970-01-01
        • 2018-08-07
        • 1970-01-01
        • 1970-01-01
        • 2015-12-15
        相关资源
        最近更新 更多