如何过滤对象内的每个数据

时间:2017-08-28 13:07:33

标签: javascript jquery

我已将一个输入值存储在名为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 过滤数据并且工作正常。

age and gender also

现在我的问题是,当我输入输入时,它只会检查名称,但我想检查if(value && d.value&&age&&gender.toLowerCase().indexOf(value.toLowerCase())==-1) 。怎么做?

我试过这个

$in

它无法正常工作。请给我任何想法。

2 个答案:

答案 0 :(得分:1)

您可以使用Array.prototype.filter()。由于您需要检查所有3个过滤器,您可以

  1. 基于名称的过滤器
  2. 基于年龄的过滤器的结果
  3. 基于性别的过滤结果
  4. 最后你会得到一个数组,其中元素通过所有3个过滤器

答案 1 :(得分:1)

&&是一个逻辑运算符。你需要连接才能发生。

我建议在元素数组上使用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对象中的所有可用值。