Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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
使用.filter()筛选javascript对象_Javascript_Arrays_Filter - Fatal编程技术网

使用.filter()筛选javascript对象

使用.filter()筛选javascript对象,javascript,arrays,filter,Javascript,Arrays,Filter,有人对使用.filter()函数过滤javascript对象有什么想法吗: 假设我有: docs: [ { "name": "Mike", "address": "Canada", "gender": "Male" }, { "name": "Jean", "address": "China", "gender": "Female" }, { "name": "Sakura", "address": "England", "gender": "Female"

有人对使用.filter()函数过滤javascript对象有什么想法吗:

假设我有:

docs: [
{
  "name": "Mike",
  "address": "Canada",
  "gender": "Male"
},
{
  "name": "Jean",
  "address": "China",
  "gender": "Female"
},
{
  "name": "Sakura",
  "address": "England",
  "gender": "Female"
}
]
是否可以这样进行过滤:

name = ''
age = ''
gender = 'Female'
filtered_docs = docs.filter(function (el) {
   return el.name == '' ||
      el.address == '' ||
      el.gender == 'Female';
});
filtered_docs = docs.filter(function (el) {
   return el.name == '' &&
      el.address == '' &&
      el.gender == 'Female';
});
因为这样做:

name = ''
age = ''
gender = 'Female'
filtered_docs = docs.filter(function (el) {
   return el.name == '' ||
      el.address == '' ||
      el.gender == 'Female';
});
filtered_docs = docs.filter(function (el) {
   return el.name == '' &&
      el.address == '' &&
      el.gender == 'Female';
});
将返回所有

这样做:

name = ''
age = ''
gender = 'Female'
filtered_docs = docs.filter(function (el) {
   return el.name == '' ||
      el.address == '' ||
      el.gender == 'Female';
});
filtered_docs = docs.filter(function (el) {
   return el.name == '' &&
      el.address == '' &&
      el.gender == 'Female';
});
我什么也不回

更新: 我只想返回基于该条件的数据。 我希望返回2张女性记录

更新 这就是我想要达到的目标

是否要筛选(即搜索数组并找到匹配的对象),还是要创建一个新数组,其中性别为女性,其余为空字符串

如果要筛选,第二种方法将起作用。它不返回任何内容,因为docs数组中的任何对象都不符合条件


如果要创建一个新数组,则考虑使用.MaP()。请参见

您的条件是错误的,您只使用性别条件对其进行过滤,无需输入其他字段

    filtered_docs = docs.filter(function (el) {return el.gender == 'Female';});

您可以对键/值对使用objetc进行筛选,并在第一步中仅获取具有所需值的键,如用于后续筛选的值

然后,通过仅检查具有要检查的值的键来过滤数组,并将过滤器的这些键用于检查。仅返回与所有键和所需值匹配的对象

var docs=[{姓名:“迈克”,地址:“加拿大”,性别:“男性”},{姓名:“吉恩”,地址:“中国”,性别:“女性”},{姓名:“樱花”,地址:“英国”,性别:“女性”},
筛选器={姓名:,年龄:,性别:,女性},
keys=Object.keys(filter).filter(k=>filter[k]),
result=docs.filter(o=>keys.every(k=>o[k]==filter[k]);
控制台日志(结果)

.as console wrapper{max height:100%!important;top:0;}
我只想返回性别为女性,其余为空字符串的数据
然后不返回任何内容是正确的结果,不是吗?由于没有以空字符串作为名称或地址的数据,因此筛选器不应返回任何数据声音,就像您试图计数女性的数量一样?只需根据性别筛选,然后检查长度。让我编辑我的帖子
filtered_docs=docs.filter(函数(el){return el.name=''&&el.address=''&&el.gender=='Female';})应该有效,你能解释一下你的预期结果吗?是的,我更新了我的帖子。对不起,这必须是3个条件加在一起。因为过滤器来自前端。在前端有三个过滤器选项,因此用户只能过滤两个,其余的不过滤。您应该触发选项的更改,以使用事件“change”和(&&operator)过滤数据。所有条件都应该为真,因此如果您输入“address”作为筛选中的空字符串,它将为false,因为任何对象中的address属性都不会与条件空字符串匹配。嗨,Nina小姐,我非常感谢你。你救了我。现在可以了。这个解决方案现在对我来说似乎很先进,但我会研究它。再次感谢你。