有人对使用.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';
});
将不返回任何内容。
更新: 我只想根据该条件返回数据。 我希望返回2条女性记录
答案 0 :(得分:1)
您可以将objetc用于键/值对以进行过滤,并且第一步仅使用具有所需值的键,例如truthy值以进行后续过滤。
然后通过仅检查具有要检查的值的键来过滤数组,并采用过滤器的这些键进行检查。仅返回与所有键和所需值匹配的对象。
var docs= [{ name: "Mike", address: "Canada", gender: "Male" }, { name: "Jean", address: "China", gender: "Female" }, { name: "Sakura", address: "England", gender: "Female" }],
filter = { name: "", age: "", gender: "Female" },
keys = Object.keys(filter).filter(k => filter[k]),
result = docs.filter(o => keys.every(k => o[k] === filter[k]));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:0)
您是否要过滤(即搜索数组并找到匹配的对象),还是要创建一个性别为女性,其余为空字符串的新数组?
如果要过滤,则第二种方法将起作用。它不会返回任何内容,因为docs数组中的所有对象均不符合条件。
如果要创建一个新数组,请考虑使用.map()。参见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
答案 2 :(得分:0)
您的条件有误,您只需要输入性别条件即可过滤
filtered_docs = docs.filter(function (el) {return el.gender == 'Female';});