在javascript中检查并比较数组中的数组

时间:2014-10-03 22:21:17

标签: javascript arrays

我无法检查主数组中包含的数组的内容。

示例:

我有两个数组

var main = [[1,2,3],
         [4,5,6]];
var compare = [1,2,4,5,6]

我想将数组“compare”与数组“main”中的每个数组进行比较,看它是否包含任何数字。结果将是我可以测试的东西(布尔值或索引位置)。

我尝试过indexOf但无法理解。

修改 这应该仍然是真的:

var main = [[1,2,3], // returns false
           [4,5,6], // returns false
           [7,8,9], // returns true
           [2,3,7]]; // returns true

var compare = [2,3,4,6,7,8,9]

**更新w / Solution ***

我需要检查比较数组的内容是否与main中的任何子数组相匹配。这就是我想出的:

var main = [[1, 2, 3],
      [4,5,6]];

var counter = 0;
var counter2 = 0;

var compare = [4,1,3,2];

for (var i = 0; i <= compare.length; i++) {
// Sorting 
compare.sort();

if (main[0].indexOf(compare[i]) > -1) {
    counter++;
    console.log("Added a point to counter 1");
} else if (main[1].indexOf(compare[i]) > -1) {      
    counter2++;
    console.log("Added a point to counter 2");
} else {   
  console.log("No points added");
}
}

// if any of the counters have 3 marks, then the player hit it 3 times.
if (counter == 3 || counter2 === 3){
console.log("A counter is at 3");
}

关于我想出的任何反馈?有什么更好的方法呢?

4 个答案:

答案 0 :(得分:1)

你需要2个循环,第一个迭代你的数组数组,第二个循环检查当前数组中的现有元素:

for (var i = 0; i < main.length; i++) {
    for (var j = 0; j < main[i].length; j++) {
        if (compare.indexOf(main[i][j]) {
            //compare has a number from the current array! main[i][j] exists in compare!
        }
    }
}

答案 1 :(得分:0)

看看lodash库,已经编写了确切的功能

答案 2 :(得分:0)

您可以使用内置数组方法:

var result = main.map(function(xs) {
  return xs.some(function(x) {
    return compare.indexOf(x) > -1
  })
})

它将返回[true, true]

答案 3 :(得分:0)

以下两种可能的解决方案:

假设:

var main = [[1,2,3],
            [4,5,6],
            [7,8,9],
            [2,3,7],
            [5,1,10]];

var compare = [2,3,4,6,7,8,9];

第一个解决方案:如果main内部数组的任何元素包含在主compare中,则返回true:

var result1= main.map(function(element,index,array){
    return element.reduce(function(previousValue, currentValue, index, array){
        return (previousValue || (compare.indexOf(currentValue) >= 0));
    }, false);
});

此解决方案给出以下结果:

result1 = [true,true,true,true,false]

第二个解决方案:返回maincompare内部数组元素的索引:

var result2= main.map(function(element,index,array){
    return element.map(function(element,index,array){
        return (compare.indexOf(element));
    });
});

此解决方案给出以下结果:

result2 = [[-1,0,1],[2,-1,3],[4,5,6],[0,1,4],[-1,-1,-1]]

点击此链接jsfiddle查看有效示例。

希望它有用!