[英]How to check if array of numbers exist in Object
我正在尝试编写一些代码,用于检查存储在数组中的一组数字是否存在于对象中。 使用我现在的代码,它总是返回-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。
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我不喜欢它的两个原因:
来自jQuery doc:
jQuery.inArray( value, array [, fromIndex ] )
jQuery.inArray
不会像你使用它一样工作。 它检查数组内容,而不是对象键。 您的值x
很好,但是您传入的是对象而不是数组。
如果您正在尝试查看一组整数是否作为对象中的键存在,您可以尝试以下方法(假设您使用的是JavaScript> = 1.6):
myArray.filter(function(x) {
// check if value is a key
return (x in squaresClicked);
}).length == myArray.length;
基本上,我们遍历数组并仅返回在对象squaresClicked
作为键存在的squaresClicked
。 如果新数组的长度与原始列表的长度相同,则值必须全部作为对象中的属性存在。
如果您不想为数组值查找对象的整个原型链,则需要使用hasOwnProperty
而不是in
。
像这样:
return (squaresClicked.hasOwnProperty(x));
您可以在此处详细了解此方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.