2012-08-09 46 views
6

我有一个像这样的多维JavaScript数组。多个值的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确切

,并具有下列值

[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 

我想是我需要做的多维数组独特的基于对一个又一个阵列称为校验IM检查阵列元素

1.例如检查数组是[15] 那么多维数组将是

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

] 

2.Example如果校验序列是[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方法,但它让我的或运算结果不与

在此先感谢

+3

_“40左右准确”_ - 啊,讽刺。 – nnnnnn 2012-08-09 10:58:06

+0

@nnnnnn ..hope你有想法。如果没有病解释更多 – coolguy 2012-08-09 10:59:36

+1

是的,你想过滤原始数组以返回包含检查数组中所有元素的所有子数组。除了你的第二个例子返回一个没有显示在你的原始数组中的子数组,所以也许我不明白。 (我以前的评论只是在那里选择你喜欢的单词而开心。) – nnnnnn 2012-08-09 11:01:11

回答

5

可以使用.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()不被IE版本,直到9,但you can fix that支持。

+0

谢谢你的男人!将检查它并让你知道 – coolguy 2012-08-09 11:15:46

+0

+1 ed谢谢你的努力 – coolguy 2012-08-09 11:31:57

2

还有一种解决方案不使用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));  
+0

谢谢你!将检查它并让你知道 – coolguy 2012-08-09 11:16:22

+0

+1 ed谢谢你的努力 – coolguy 2012-08-09 11:32:17

3

使用.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。这些数组函数可在较新的浏览器上使用。

+0

谢谢你的男人!将检查它并让你知道 – coolguy 2012-08-09 11:15:17

+0

+1 ed谢谢你的努力 – coolguy 2012-08-09 11:31:39