Javascript:如何检查数组是否包含某些值

时间:2016-02-12 10:19:08

标签: javascript

我试图创建可以检测多个值是否在数组中的内容,这是我尝试使用的内容,但总是返回true

row7 = [1, 1, 1, 1, 1, 1, 1, 1];

var field = [row0, row1, row2, row3, row4, row5, row6, row7];
console.log(field[0,1]); // Get the first item in the array


    var needles = [1, 1, 1, 1]
    console.log(needles)
    var haystack = field[0,row7]
    console.log(haystack)

    console.log(contains(haystack,needles));
    function contains(haystack, needles) {

return needles.map(function (needle) { 
    return haystack.indexOf(needle);
}).indexOf(-1) == -1;
}

案例真实:

row 7 = [1, 1, 1, 1, 1, 1, 1, 1]

检查(连续四次):

needles =  [1, 1, 1, 1]

虚假:

 row7 =  [1, 1, 0, 1, 0, 0, 0, 1]

编辑:

整个数组:

/*    Array containing the playing field 8 x 8 

       C0 C1 C2 C3 C4 C5 C6 C7
    R0[0][0][0][0][0][0][0][0]
    R1[0][0][0][0][0][0][0][0]
    R2[0][0][0][0][0][0][0][0] 
    R3[0][0][0][0][0][0][0][0] 
    R4[0][0][0][0][0][0][0][0]
    R5[0][0][0][0][0][0][0][0] 
    R6[0][0][0][0][0][0][0][0] 
    R7[0][0][0][0][0][0][0][0]

* \

    var row0 = [0, 0, 0, 0, 0, 0, 0, 0],
    row1 = [0, 0, 0, 0, 0, 0, 0, 0],
    row2 = [0, 0, 0, 0, 0, 0, 0, 0],
    row3 = [0, 0, 0, 0, 0, 0, 0, 0],
    row4 = [0, 0, 0, 0, 0, 0, 0, 0],
    row5 = [0, 0, 0, 0, 0, 0, 0, 0],
    row6 = [0, 0, 0, 0, 0, 0, 0, 0],
    row7 = [0, 0, 0, 0, 0, 0, 0, 0];

var field = [row0, row1, row2, row3, row4, row5, row6, row7];

有没有办法用普通的JS实现这个目的?

提前致谢。

3 个答案:

答案 0 :(得分:2)

我认为最简单(不是最有效)的解决方案是首先将两个数组转换为字符串,然后检查一个字符串是否是另一个字符串的子字符串:

function contains(array1, array2) { 
   if(array1 == null || array2 == null)
      return false;

   return array1.toString().contains(array2.toString()); 
}

var row7 = [1, 1, 1, 1, 1, 1, 1, 1];
var needles =  [1, 1, 1, 1];

contains(row7, needles); //returns true

row7 =  [1, 1, 0, 1, 0, 0, 0, 1]

contains(row7, needles); //returns false

更新:

我刚刚意识到所有浏览器都不支持contains功能。因此,最好使用indexOf,即return array1.toString().indexOf(array2.toString()) != -1;

答案 1 :(得分:1)

您可以使用带有偏移的Array.prototype.every()进行搜索。

function check(haystack, needles) {
    var offset = 0;

    while (offset + needles.length <= haystack.length) {
        if (needles.every(function (a, i) {
            return haystack[i + offset] === a;
        })) {
            return true;
        }
        offset++;
    }
    return false;
}

var row7 = [1, 1, 1, 1, 1, 1, 1, 1],
    row8 = [1, 1, 0, 1, 0, 0, 0, 1],
    needles = [1, 1, 1, 1];

document.write(check(row7, needles) + '<br>');
document.write(check(row8, needles) + '<br>');

答案 2 :(得分:1)

将您的contains方法更改为

function contains(haystack, needles) 
{
   return haystack.join(",").indexOf(needle.join(",")) != -1;
}

说明 -

  • 加入needle以获取"1,1,1,1"

  • 和haystack加入"1,1,1,1,1,1,1,1"

  • 当你做indexOf时,由于针头包含在干草堆中,你会得到0