【问题标题】:Jquery filters array by multiple property and valueJquery通过多个属性和值过滤数组
【发布时间】:2017-12-14 13:02:14
【问题描述】:

我有一个多选框,我尝试根据所选的多桩属性获取过滤后的数据 喜欢这个例子

var names = [
    { name : "Joe", age:20, email: "joe@hotmail.com"},
    { name : "Mike", age:50, email: "mike@hotmail.com"},
    { name : "Joe", age:45, email: "mike@hotmail.com"}
   ];

var filteredNames = $(names).filter(function( idx ) {
    return names[idx].name === "Joe" && names[idx].age < 30;
}); 

但就我而言,我想按值数组进行过滤

 // data selected
var nameselected= $('select[name="usernames"]').val();
var ageselected= $('select[name="ages"]').val();
var filteredNames = $(names).filter(function( idx ) {
    return names[idx].name IN ( nameselected ) && names[idx].age IN (ageselected);
}); 

我可以这样做吗!

【问题讨论】:

    标签: javascript jquery arrays object


    【解决方案1】:

    如果您想过滤所有名称在selectednames 数组中和年龄在selectedages 数组中的项目,您可以执行以下操作:

    var filteredNames = names.filter(function(item) {
      return nameselected.indexOf(item.name) > -1 && ageselected.indexOf(item.age) > -1;
    });
    

    演示:

    var names = [{
        name: "Joe",
        age: 20,
        email: "joe@hotmail.com"
      },
      {
        name: "Mike",
        age: 50,
        email: "mike@hotmail.com"
      },
      {
        name: "John",
        age: 45,
        email: "mike@hotmail.com"
      }
    ];
    
    //var nameselected= $('select[name="usernames"]').val();
    //var ageselected= $('select[name="ages"]').val();
    
    var nameselected = ["Joe", "John"];
    var ageselected = [20, 45];
    
    var filteredNames = names.filter(function(item) {
      return nameselected.indexOf(item.name) > -1 && ageselected.indexOf(item.age) > -1;
    });
    
    console.log(filteredNames);

    注意:

    • 请注意,您最好使用 Javascript Arrayfunctions 循环遍历您的数组,而不是使用 jQuery 方法和使事情复杂化。

    • 请注意,这只会返回年龄在selectedages 中的项目 数组,并且年龄不低于selectedages 值,在这种情况下 您需要对年龄的array 进行排序以检查是否存在 低于最低值。

    【讨论】:

      【解决方案2】:

      我认为您可以使用indexOf(如果值在数组内,则结果值 >-1)来检查您的数据值是否在所选值的数组内

      见以下片段:

      var names = [
          { name : "Joe", age:20, email: "joe@hotmail.com"},
          { name : "Mike", age:50, email: "mike@hotmail.com"},
          { name : "Joe", age:45, email: "mike@hotmail.com"},
          { name : "Doe", age:40, email: "doe@hotmail.com"}
         ];
      
      var nameselected = ["Joe","Doe"];
      var ageselected =  [20,40,35];
      
      var filteredNames = $(names).filter(function( idx ) {
          return (nameselected.indexOf(names[idx].name)>-1 && ageselected.indexOf(names[idx].age)>-1);
      }); 
      
      $.each(filteredNames,function(index,name){
        console.log(name);
      })
      &lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt;

      【讨论】:

        猜你喜欢
        • 2020-04-21
        • 2021-03-21
        • 1970-01-01
        • 2017-11-03
        • 2021-11-18
        • 2021-09-23
        • 1970-01-01
        • 2011-02-05
        • 1970-01-01
        相关资源
        最近更新 更多