我正在尝试编写一些代码来检查对象中是否存在数组中存储的数字。使用我现在的代码,它总是返回-1。
function checkHorizonal() {
var x= ['1', '2' ,'3'];
var y= ['4', '5', '6'];
var z= ['7', '8', '9']
console.log(jQuery.inArray(x, squaresClicked));
}
这是squaresClicked
对象内容:
Object {1: "1", 2: "-1", 3: "1"}
您可以看到键1,2,3存在,但它将返回-1。
答案 0 :(得分:1)
jQuery的inArray
无法处理一组针,否则
$.inArray(x, Object.keys(squaresClicked));
会工作的。在这种情况下,你会陷入迭代,我想(尽管可能还有其他一些棘手的方法 - 一如既往)。 jQuery的一种方式(虽然我不太喜欢它因各种原因 1 ):
var hasFailed = false;
$.each(x, function (index, value) {
if($.inArray(value, Object.keys(squaresClicked)) === -1) {
hasFailed = true;
}
});
return !hasFailed;
基本的vanillaJS方法:
for(var i = 0; i < x.length; i++) {
if(!squaresClicked.hasOwnProperty(x[i])) {
return false;
}
}
return true;
1 我不喜欢它的两个原因:
答案 1 :(得分:1)
来自jQuery doc:
jQuery.inArray( value, array [, fromIndex ] )
jQuery.inArray
无法按照您使用它的方式运行。它检查数组内容,而不是对象键。您的值x
很好,但您传入的是对象而不是数组。
如果您正在尝试查看一组整数是否作为对象中的键存在,则可以尝试以下操作(假设您使用的是JavaScript&gt; = 1.6):
myArray.filter(function(x) {
// check if value is a key
return (x in squaresClicked);
}).length == myArray.length;
基本上,我们遍历数组,只返回在对象squaresClicked
中作为键存在的数组。如果新数组的长度与原始列表的长度相同,则值必须全部作为对象中的属性存在。
如果您不想为数组值查找对象的整个原型链,则需要使用hasOwnProperty
而不是in
。
像这样:
return (squaresClicked.hasOwnProperty(x));
您可以详细了解此方法here。