Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以在Javascript中的数组中一次搜索2个值吗_Javascript_Arrays_Sorting_Filtering - Fatal编程技术网

可以在Javascript中的数组中一次搜索2个值吗

可以在Javascript中的数组中一次搜索2个值吗,javascript,arrays,sorting,filtering,Javascript,Arrays,Sorting,Filtering,我知道我可以用几种不同的方法搜索(数组中的单个项)。使用for循环、foreach、递归结构等进行迭代,但我不尝试这样做,因为我一次搜索多个项 例如,我可能有一个具有此模型的对象数组: 人物:[{姓名:“你好”,日期:2/2,性别:男},{姓名:“杰克”,日期:3/3,性别:男}] 我想知道豪迪和杰克是否同时在那里。或者我想知道豪迪和杰克是否都在人群中。或者我想通过搜索人物数组中基于生日和性别的匹配来知道豪迪和杰克是否都在那里 我知道如何一次只搜索一个值,但不会按多个值搜索。我在stackove

我知道我可以用几种不同的方法搜索(数组中的单个项)。使用for循环、foreach、递归结构等进行迭代,但我不尝试这样做,因为我一次搜索多个项

例如,我可能有一个具有此模型的对象数组:

人物:
[{姓名:“你好”,日期:2/2,性别:男},{姓名:“杰克”,日期:3/3,性别:男}]

我想知道豪迪和杰克是否同时在那里。或者我想知道豪迪和杰克是否都在人群中。或者我想通过搜索人物数组中基于生日和性别的匹配来知道豪迪和杰克是否都在那里

我知道如何一次只搜索一个值,但不会按多个值搜索。我在stackover flow上找到了这个,但我不明白。是否有一种更简单的方法可以搜索数组以基于多个键在数组中查找匹配项

这不起作用:

function containsAll(needles, haystack){

    for(var i = 0, len = needles.length; i <len; i++){
        if($.inArray(needles[i], haystack) == -1_ return false
    }
        return true;

}


containsAll([34, 78, 89], [78, 67, 34, 99, 56, 89]); // true

containsAll([34, 78, 89], [78, 67, 99, 56, 89]); // false

containsAll([34, 78, 89], [78, 89]); // false
函数包含所有(针、草堆){

对于(var i=0,len=pinees.length;i,如果这些
数组是基本体,您可以使用:


更新:

如果不知道
数组
是否为基元,则必须检查它是否为基元,如果不知道,则通过
属性
检查
属性

function containsAll(needles, haystack){
  return needles.every(x => haystack.find(y => {
    if(typeof y == 'string' || typeof y == 'number') {
      return x == y;
    }
    return Object.keys(y).every(z => x[z] == y[z]);
  }));
}

console.log(containsAll([34, 78, 89], [78, 67, 34, 99, 56, 89]));
//true

console.log(containsAll([34, 78, 89], [78, 67, 99, 56, 89])); 
// false

console.log(containsAll([34, 78, 89], [78, 89])); 
// false

console.log(containsAll([{num: 34, animal: "chicken", city: "chicago"}], [{number: 78, name: "chicken", num: 34}, 99, 56, "hello", {num: 34, animal: "chicken", city: "chicago"}]));
// true

console.log(containsAll([{num: 35, animal: "chicken", city: "chicago"}], [{number: 78, name: "chicken", num: 34}, 99, 56, "hello", {num: 34, animal: "chicken", city: "chicago"}]));
// false

您的方法:

将返回值从循环的
中移出

函数包含所有(针、草堆){
对于(变量i=0,len=pines.length;i

可能重复的
这不起作用:
如果你去掉语法错误它会起作用->
==-1
->
=-1)
我做了,但是这个附加到什么元素呢?($.inArray(Piners[I])是类inArray?
$.inArray
它是一个jquery实用程序方法..我看到了$Pineder[I]是它正在选择的类,但我们首先运行一个名为inArray的方法。我理解正确吗?为什么要声明
var数组=[{name:“howdy”,date:'2/2','g':'m'},{name:'jack','date':'3/3','g':'m'}]
而不使用它?我假设如果比较对象,则需要手动比较所有子属性以建立匹配?@不,这是一个很大的输入错误xD@Nope如果它们是对象,我们肯定需要比较子属性。我正在尝试比较对象:@baryjones23saturn这取决于输入的值是否应等于某些情况/值s您可以使用逻辑运算符:
input1==somestring&&input2==somestring
这样您就不需要几个
if
来处理这些情况。console.log(containsAll([{num:34,动物:“鸡”,城市:“芝加哥”),{number:78,名称:“鸡”,num:34},99,56,“你好”,“num:34,动物:“鸡”,城市:“芝加哥”)); // true@baryjones23saturn我已经添加了一种方法,当你可以有原语和非原语数组时。例如,如果我的搜索过滤器用于输入字段,我是否需要有几个不同的if语句来覆盖所有情况。例如,如果我有4个字段,分别是姓名、出生日期、身高、体重。如果他们选择了所有4个输入,我是否需要一个过滤器,如果他们选择了3个输入,如果他们选择了2个输入,等等。然后如果他们选择了名称和dob,并将其他2个输入字段留空等等。当然,与一堆if语句相比,有一种更简单的方法可以做到这一点。如果我有20个字段,这将需要永远。
function containsAll(needles, haystack){
  return needles.every(x => haystack.find(y => {
    if(typeof y == 'string' || typeof y == 'number') {
      return x == y;
    }
    return Object.keys(y).every(z => x[z] == y[z]);
  }));
}

console.log(containsAll([34, 78, 89], [78, 67, 34, 99, 56, 89]));
//true

console.log(containsAll([34, 78, 89], [78, 67, 99, 56, 89])); 
// false

console.log(containsAll([34, 78, 89], [78, 89])); 
// false

console.log(containsAll([{num: 34, animal: "chicken", city: "chicago"}], [{number: 78, name: "chicken", num: 34}, 99, 56, "hello", {num: 34, animal: "chicken", city: "chicago"}]));
// true

console.log(containsAll([{num: 35, animal: "chicken", city: "chicago"}], [{number: 78, name: "chicken", num: 34}, 99, 56, "hello", {num: 34, animal: "chicken", city: "chicago"}]));
// false