Javascript 如何过滤对象中的每个数据

Javascript 如何过滤对象中的每个数据,javascript,jquery,Javascript,Jquery,我在一个名为value的变量中存储了一个输入值 var value=$("#globalSearch").val().trim(); 我有一个名为jsonData的对象 0:{name:"xxxx",age:"20",gender:"male"}; 1:{name:"yyy",age:"22",gender:"female"}; 2:{name:"zzz",age:"20",gender:"female"} 现在,我只根据name及其工作状况过滤数据 var Data={};

我在一个名为
value
的变量中存储了一个输入值

var value=$("#globalSearch").val().trim(); 
我有一个名为
jsonData
的对象

0:{name:"xxxx",age:"20",gender:"male"};
1:{name:"yyy",age:"22",gender:"female"};
2:{name:"zzz",age:"20",gender:"female"}
现在,我只根据
name
及其工作状况过滤数据

 var Data={};
     var value=$("#globalSearch").val().trim();
    $.each(jsonData,function(i,d){
      debugger;
      if(value && d.value.toLowerCase().indexOf(value.toLowerCase())==-1)
      {
        return;
      }

      if(!Data[d.age])
      {
        Data[d.age]=[];
      }

      Data[d.age].push(d);

    });

    return Data
现在我的问题是,当我输入时,它将只检查姓名,但我想检查年龄和性别。怎么做

我试过这样做

if(value && d.value&&age&&gender.toLowerCase().indexOf(value.toLowerCase())==-1)
它不起作用了。请告诉我任何想法。

你可以使用。因为你需要检查所有3个过滤器,你可以做

  • 基于名称的过滤器
  • 在1的结果上。基于年龄的过滤器
  • 在2的结果上。基于性别的筛选
  • 最后,您将拥有一个数组,其中元素通过您可以使用的所有3个过滤器。因为你需要检查所有3个过滤器,你可以做

  • 基于名称的过滤器
  • 在1的结果上。基于年龄的过滤器
  • 在2的结果上。基于性别的筛选

  • 最后,您将拥有一个数组,其中元素通过所有3个过滤器&

    &
    是一个逻辑运算符。您需要进行连接

    我建议对元素数组使用
    join
    ,以执行连接:

    if(value && 
      [d.value, d.age, d.gender].join('|').toLowerCase().indexOf(value.toLowerCase())==-1)
    
    如果您有ES6支持,您可以执行以下操作:

    if(value && 
      !Object.values(d).join('|').toLowerCase().includes(value.toLowerCase()))
    

    。。。它将连接
    d
    对象中的所有可用值。

    &&
    是一个逻辑运算符。您需要进行连接

    我建议对元素数组使用
    join
    ,以执行连接:

    if(value && 
      [d.value, d.age, d.gender].join('|').toLowerCase().indexOf(value.toLowerCase())==-1)
    
    如果您有ES6支持,您可以执行以下操作:

    if(value && 
      !Object.values(d).join('|').toLowerCase().includes(value.toLowerCase()))
    


    。。。这将连接
    d
    对象中的所有可用值。

    因此,您要筛选与特定姓名、年龄和性别匹配的广告吗?@marvel308 yes。能帮我吗?jsonData也是数组吗?它是一个数组。
    &&
    是一个逻辑运算符。你需要用括号代替
    +
    (d.value+d.age+d.gender)。toLowerCase()
    ,添加一个不常见的分隔符也不会有任何影响。所以你想过滤与特定姓名、年龄和性别匹配的广告吗?@marvel308 yes。能帮我吗?jsonData也是数组吗?它是一个数组。
    &&
    是一个逻辑运算符。你需要用括号代替
    +
    (d.value+d.age+d.gender).toLowerCase()
    ,添加一个不常见的分隔符也不会有任何影响。为什么我们需要添加.join(|“”)这是为了防止匹配会跨越两个值。想象有人在输入中输入
    x2
    。然后,如果没有连接,而是与
    +
    进行简单的连接,则它将部分与
    属性(
    xxxx
    )匹配,部分与
    年龄
    属性(
    20
    )匹配。(我想)你不会想要的。由于人们不会很快在搜索字符串中输入管道,因此在连接字符串中保留这些属性值是合适的字符。如果我将
    johnsena
    作为输入,它应该返回完全匹配的数据,如果我把
    jo
    作为输入,它应该什么也不返回。但是在我的示例中,我得到的响应都是从
    jo
    开始的。我不想这样(我只想精确匹配)。有什么简单的方法可以做到这一点吗?我编写了这样的条件
    if(value&&d.name.toLowerCase().indexOf(value.toLowerCase())==-1&&d.age.toLowerCase()!=value.toLowerCase()&&d.gender.toLowerCase()!=value.toLowerCase())
    工作正常。我想要更简单的代码来实现这个条件。当然,但是你对另外两个字段(不是
    indexOf
    ,而是
    !=
    )应用了与你在问题中暗示的不同的规则。为什么我们需要添加.join(|“”)这是为了防止匹配会跨越两个值。想象有人在输入中输入
    x2
    。然后,如果没有连接,而是与
    +
    进行简单的连接,则它将部分与
    属性(
    xxxx
    )匹配,部分与
    年龄
    属性(
    20
    )匹配。(我想)你不会想要的。由于人们不会很快在搜索字符串中输入管道,因此在连接字符串中保留这些属性值是合适的字符。如果我将
    johnsena
    作为输入,它应该返回完全匹配的数据,如果我把
    jo
    作为输入,它应该什么也不返回。但是在我的示例中,我得到的响应都是从
    jo
    开始的。我不想这样(我只想精确匹配)。有什么简单的方法可以做到这一点吗?我编写了这样的条件
    if(value&&d.name.toLowerCase().indexOf(value.toLowerCase())==-1&&d.age.toLowerCase()!=value.toLowerCase()&&d.gender.toLowerCase()!=value.toLowerCase())
    工作正常。我想要更简单的代码来实现这个条件。当然,但是你对另外两个字段(不是
    indexOf
    ,而是
    !=
    )应用的规则与你在问题中暗示的不同。