使用.filter()筛选javascript对象
有人对使用.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"
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小姐,我非常感谢你。你救了我。现在可以了。这个解决方案现在对我来说似乎很先进,但我会研究它。再次感谢你。