繁体   English   中英

如何检查Object中是否存在数字数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM