Javascript:如何检查数组是否包含某些值
Javascript: How can i check if a array contains certain values
我正在尝试创建可以检测数组中是否有多个值的东西,这是我尝试使用的,但总是返回 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 来实现这一点?
提前谢谢。
我认为最简单(不是最有效的(解决方案是首先将两个数组转换为字符串,然后检查一个字符串是否是另一个字符串的子字符串:
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;
将
contains
方法更改为
function contains(haystack, needles)
{
return haystack.join(",").indexOf(needle.join(",")) != -1;
}
解释 -
加入
needle
以获得"1,1,1,1"
以及干草堆的加入以获得
"1,1,1,1,1,1,1,1"
当你做
indexOf
你会得到0,因为针包含在大海捞针中
您可以使用带有偏移量的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>');
相关文章:
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- 用于检查数组中是否存在元素的javascript自定义方法
- 验证会话中是否存在对象's数组
- JS数组-检查对象值是否重复
- 如何检查数组中的对象是否等于选项值
- javascript数组元素是否知道其封闭数组
- 是否“;对于的“;循环迭代遵循JavaScript中的数组顺序
- 使用JavaScript或jQuery检查单选按钮选择是否与数组中的项目匹配
- 检查数组中是否存在字符串值,并返回找到的数组值js
- 查找对象数组是否包含其中一个标记的最快方法
- JavaScript:是否可以将图像/信息附加到数组项
- 消隐数组元素是否生成自己的属性
- 检查来自不同数组的两个元素的一个属性是否相等
- 检查数组是否包含
- 在对象上迭代以验证它是否's键存在于数组中
- Javascript检查图像是否在数组中
- 是否可以将字符串转换为文字对象数组
- 如何确定$(this)是否在单击事件的数组中
- 使用JQuery检查数组的索引中是否存在字符串
- 确定数组是否包含偶数